0
UILabelの高さをキャプチャして、セルの高さを動的に設定できるようにしようとしていますが、正しい高さを返しません。常に切り捨てられ、省略記号が付加されます。UILabelの高さの復帰は決して正確ではありません
マイコード:
let height = String(page.valueForKey(subject)).heightWithConstrainedWidth(self.view.frame.width - 30, font: UIFont.systemFontOfSize(16.0))
// and at the bottom of my class..
// Custom functions
extension String {
func heightWithConstrainedWidth(width: CGFloat, font: UIFont) -> CGFloat {
let constraintRect = CGSize(width: width, height: CGFloat.max)
let boundingBox = self.boundingRectWithSize(constraintRect, options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil)
return boundingBox.height
}
}
それが比較的大きいダイナミックな数のいくつかの並べ替えを返しますが、数は常に短く、決して正確であるので、それは間違いなく勇敢な試みを行います。
高さをどのように抽出しているのか不明瞭な点がありますか?これを実行するより良い方法はありますか? Mattの応答パー
、私はとてもラベルを測定するための更新:
// Custom functions
extension String {
func heightWithConstrainedWidth(width: CGFloat, font: UIFont) -> CGFloat {
let label:UILabel = UILabel(frame: CGRectMake(0,0,width, CGFloat.max))
label.numberOfLines = 0
label.lineBreakMode = .ByWordWrapping
label.font = font
label.text = self
label.sizeToFit()
return label.frame.height
}
}
をしかし、それはまだ十分にかなり大きくないのです...
挨拶!それは莫大な量の感覚を作ります。私は、 'cellForRowAtIndexPath'(私が私のUILabelをインスタンス化する場所)が* after *' heightForRowAtIndexPath'の後に呼び出されるという印象を受けています。私はむしろそれを測定するためにUILabelをインスタンス化せず、後で。 'cellForRowAtIndexPath'の最終結果を' heightForRowAtIndexPath'メソッドに送る方法はありますか?私はちょうどUILabel内の文字列のサイズを返すために私の '拡張文字列'を更新することができると思います.. – Trip
実際には、含まれているラベルに基づいてセルのサイズを変更する方法を知りません。多分それはあなたが尋ねたはずのものです! – matt
十分です。あなたの助けに感謝しています。 – Trip