22195


AutoLayoutを利用して高さを可変にしているCell上のLabelでLinesを4行に指定しています。  
しかし、テキストの量が4行か4行以上の場合は4行表示されますがそれ以下の場合はたとえテキストが2行分あっても1行のみ表示され末尾が...になってしまいます。  
この問題はiOS9でのみ発生し、iOS8ではテキストに応じて1〜4行がちゃんと表示されています。  
コードは下記の通りです。

[code]

    self.label.attributedText = attributedText;
    [self.label sizeToFit];
    [self.contentView layoutIfNeeded];
    
[/code]

attributedTextに問題があるのかと思い`self.label.text =
text`に試しに変更してみましたが問題は解決しなかったのでattributedTextに問題はなさそうです。

その他の設定としてはLabelの高さをテキストに応じて可変にするためLabelの上下左右にはその他の要素との距離を固定値で指定しています。  
また、テキストが2行や3行分の時はその分の高さが確保されているようで上下の余白が大きくなっています。ちゃんと表示領域は確保されているのに1行しか表示されていないようです。  
解決方法わかる方いましたら教えていただけると助かります。


CC BY-SA 3.0
2016-02-17T02:49:59.647
22189
2016-02-17T06:13:56.423
12232
question
uilabel ios9
iOS9 UILabel Lines指定しても1行かLinesで指定した行数しか表示されない


AttributedStringを表示できる大きさ（`CGRect`）を、計算で導いて、それによって、`UILabel`のフレームサイズを決定するのが、確実だと思います。  
[NSAttributedString UIKit Additions
Reference](https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/NSAttributedString_UIKit_Additions/index.html)の`func
boundingRectWithSize(_ size: CGSize, options options: NSStringDrawingOptions,
context context: NSStringDrawingContext?) -> CGRect`を使って、計算ができます。  
サンプルコードを示します（Swiftにて、失礼）。

[code]

    import UIKit
    
    // もとになるAttributedStringを用意。
    let attributedText = NSAttributedString(string: "Alphabet Brake Canada Drive Energy Fight Global Human Italy Joint Knock", attributes: [NSFontAttributeName: UIFont(name: "Helvetica-Bold", size: 24.0)!])
    // 幅200pxの場合の、矩形座標を算出。CGSizeのheightを、十分に大きな値にするのがポイント。
    let textRect = attributedText.boundingRectWithSize(CGSize(width: 200.0, height: 2000.0), options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: nil)
    // textRect = {x 0 y 0 w 192.035 h 138}
    
    // 計算の結果に基づいて、UILabelの高さを決める。
    let label = UILabel(frame: CGRect(x: 0.0, y: 0.0, width: 200.0, height: textRect.size.height))
    label.numberOfLines = 0
    // 視覚的に分かりやすいように、UILabelに枠線をつけておく。
    label.layer.borderWidth = 1.0
    label.attributedText = attributedText
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/jSBmx.png)](https://i.stack.imgur.com/jSBmx.png)

コード中のコメントにも書きましたが、メソッド`boundingRectWithSize`の第一引数`CGSize`の`height`を、余裕があるくらい大きな値にしないと、期待する値を得られないようです。


CC BY-SA 3.0
2016-02-17T06:00:10.710
22195
2016-02-17T06:13:56.423
2016-02-17T06:13:56.423
7362
7362
22189
answer