2016-03-23 7 views
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 
    } 
} 

をしかし、それはまだ十分にかなり大きくないのです...

答えて

1

あなたのコードは、それが何のために罰金です。問題は単にラベルが文字列ではないことです。あなたは文字列の高さを見つけています。それはあなたがしたいことではありません。あなたはラベルの高さを見つけたい!結局のところUILabelには、それに含まれる文字列よりも多くのものがあります。 UILabelは文字列よりも背が高い。あなたはそれを考慮に入れていません。

+0

挨拶!それは莫大な量の感覚を作ります。私は、 'cellForRowAtIndexPath'(私が私のUILabelをインスタンス化する場所)が* after *' heightForRowAtIndexPath'の後に呼び出されるという印象を受けています。私はむしろそれを測定するためにUILabelをインスタンス化せず、後で。 'cellForRowAtIndexPath'の最終結果を' heightForRowAtIndexPath'メソッドに送る方法はありますか?私はちょうどUILabel内の文字列のサイズを返すために私の '拡張文字列'を更新することができると思います.. – Trip

+0

実際には、含まれているラベルに基づいてセルのサイズを変更する方法を知りません。多分それはあなたが尋ねたはずのものです! – matt

+0

十分です。あなたの助けに感謝しています。 – Trip

関連する問題