我正在编写一个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]
以编程方式计算高度,但这导致完全相同的问题(我无法获得正确的宽度作为输入)。我该如何解决这个问题?
答案 0 :(得分:0)
虽然我仍然不清楚问题的原因,但我通过继承UILabel并输入以下代码来解决问题:
@implementation MyLabel
- (void)layoutSubviews
{
self.preferredMaxLayoutWidth = CGRectGetWidth(self.bounds);
[super layoutSubviews];
}
@end