kitoko552.memo

kitoko552のメモ

UILabelにwidthが可変になるようなconstraintsを加えると高さがうまく計算されない

UILabelはnumberOfLinesの設定によって行数を変更することができます。

その際、IBでheightにconstraintsを加えない限り、文字列の長さによって自動で高さを計算して表示してくれます。

しかし、widthが可変になるようなconstraintsを加えていると、文字列の長さによる高さの計算が曖昧になり、表示が崩れることがあります(必ずではありません)。

「widthが可変になるようなconstraints」とは例えば、以下のようなTrailing Spaceに対するGreaterThanOrEqualのconstraintsです。

f:id:kitoko552:20150826160328p:plain

UILabelの文字列の内容によってwidthを変化させたいという意図でこのようなconstraintsを加えると思いますが、こうすると2行以上になった場合、上に書いた通り、文字列の長さによる高さの計算が曖昧になり、表示が崩れる可能性があります(ただし、初めからUILabelが2行以上にならないことがわかっている場合はこのconstraintsは正しいです)。

上のような場合は、GreaterThanOrEqualではなく、Equalにするとwidthが明確になるため表示が崩れる心配はありません。

UILabelでは、文字列の長さと自身のwidthを使って高さを計算するため、widthが可変になるようなconstraintsを加えてしまうと高さの計算がうまくいかない場合があるということを覚えておきましょう。

詳解 iOS SDK 第4版 ―ワンランク上のiPhone/iPadプログラミング

詳解 iOS SDK 第4版 ―ワンランク上のiPhone/iPadプログラミング