【发布时间】:2018-03-22 17:02:05
【问题描述】:
我正在尝试让 UILabel 流向多行并使用自动布局将其下方的元素向下推。
这是我在 viewwillappear 中调用的代码。
self.myLabel.numberOfLines = 0;
self.myLabel.lineBreakMode = NSLineBreakByWordWrapping;
[_myLabel setContentCompressionResistancePriority:1000
forAxis:UILayoutConstraintAxisVertical];
[self.myLabel setNeedsDisplay];
[self.myLabel layoutIfNeeded];
[self.view setNeedsDisplay];
[self.view layoutIfNeeded];
UILabel 被限制在内容视图的顶部,而它下方的图像被限制在 UILabel 的底部。该标签还具有 >=21 的高度限制。
在初始加载时,标签只显示一行。
奇怪的是,在启动模态 VC 并关闭它后,标签确实转到多行,但未能将其下方的元素下推。
在初始加载时。
启动和取消模态VC后
我想知道问题是否与布置子视图的时间有关,但我几乎尝试了所有事情。
提前感谢您的任何建议。
【问题讨论】:
-
如何在界面生成器中设置 .lines
-
您的限制是什么?您是否将所有视图都设置为限制在主视图的顶部,或者它们是否限制在 UILabel 的底部?你有没有调试过视图层次结构?
-
标签如何约束在x轴上?
-
IB 中的行数为 0。大约有 40 个约束。标签顶部被限制为超级视图。然后垂直的将所有内容链接到它上面的元素。底部元素被限制在超级视图的底部。它的优先级为 250,因此可以调整。在 x 轴上,标签受前导和尾随的限制。
-
我终于找到了一个解决方案,虽然不是一个优雅的解决方案:在 didLayoutSubviews 中手动调整大小。我为高度约束创建了一个实例变量,并在 viewdidlayoutsubviews 中设置: CGSize labelSize = [self.myLabel sizeThatFits:CGSizeMake(self.myLabel.frame.size.width, FLT_MAX)];浮动标签高度=标签大小.高度; _myLabelHeight.constant=labelHeight;
标签: ios autolayout uilabel