読者です 読者をやめる 読者になる 読者になる

【swift】TTTAttributedLabelでSizetoFitとSizeThatFitsが効かなかったときの対応メモ

はじめに

今回やりたかったのは、
TTTAttributedLabelで生成したラベルにnumberoflinesを設定して高さ可変の対応したときにハマったのでメモしておきます。

解決方法

通常のUILabelだと、以下のコードみたいなかんじでいけたのですが今回はいけませんでした

// 可変な文字列をセットしたときの高さを求める
let text = "コメントコメントコメントコメントコメントコメントコメントコメント"

label.enabledTextCheckingTypes = NSTextCheckingType.Link.rawValue
label.font = UIFont.systemFontOfSize(14)
label.frame = CGRectMake(・・・)
label.text = text
label.numberOfLines = 0
let rect = label.sizeThatFits(CGSizeMake(widthMax, CGFLOAT_MAX))
label.frame.size = rect
let height: CGFloat = rect.height

で、TTTAttributedLabelのコードをのぞいてみると、attributedTextが設定されていない場合にsizeThatFitsが期待どおりにうごかないことがなんとなくわかりました、、、

// 可変な文字列をセットしたときの高さを求める
let text = "コメントコメントコメントコメントコメントコメントコメントコメント"

label.enabledTextCheckingTypes = NSTextCheckingType.Link.rawValue
label.font = UIFont.systemFontOfSize(14)
label.frame = CGRectMake(・・・)
label.text = text
label.numberOfLines = 0
label.attributedText = NSMutableAttributedString(string:text as! String) // ★ここを追加!!
label.frame.size = rect
let height: CGFloat = rect.height

ちなみにまだちゃんと理解できていないのですが、labelのプロパティをセットする順番によって期待どおりに動くときと動かないときがありました、、、

とりあえず解決してよかった。
以上です