自动布局UILabel高度计算错误

时间:2014-05-12 13:31:25

标签: ios objective-c uilabel

我正在编写一个iPad应用程序,它使用自动布局在纵向和横向方向上正确地在屏幕上定位视图。布局(简化)如下所示:

-UIView
 -UIScrollView (all spacing pinned to superview)
  -UIView (top, bottom spacing pinned to superview, leading and trailing spacing pinned to root view to prevent horizontal scrolling)
   -UIImageView (leading and trailing spacing pinned to superview, height pinned to fixed value)
   -UILabel (leading, trailing, and top spacing pinned to superview)

我已经ScrollView工作,但我希望UILabel垂直缩放以适应其多行内容,这是行不通的。它会根据内容调整其高度,但它使用故事板中指定的(固定)帧宽度来实现,而不是使用约束计算的实际宽度,当设备更改方向时,约束会更改。这会导致UILabel在横向模式下过高。由于UILabel的内容是垂直居中的,因此文本的上边距过大。

我不知道造成麻烦的是什么。尝试向UILabel添加高度约束,然后使用[NSString sizeWithFont:constrainedToSize]以编程方式计算高度,但这导致完全相同的问题(我无法获得正确的宽度作为输入)。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

虽然我仍然不清楚问题的原因,但我通过继承UILabel并输入以下代码来解决问题:

@implementation MyLabel

- (void)layoutSubviews
{
    self.preferredMaxLayoutWidth = CGRectGetWidth(self.bounds);
    [super layoutSubviews];
}

@end