我想在 Interface Builder 中完成下图中显示的内容。基本上是两个标签——一个多行标签和一个注释——在一个 View 中,并且该 View 在页面上水平居中。所以要清楚,我不能对 View 施加宽度限制,否则居中将无法正常工作。
当标签不在 View 中时,我可以获得带有实际小时数的多行标签,但是当我将它放在 View 中并设置顶部、左侧和右侧约束时 - 标签恢复为单行.
下面是 View 中标签的约束和属性,以及更新框架时 IB 所做操作的图片。任何建议将不胜感激。
只有工作时间的标签有一些限制:
这是我更新帧后的样子
最佳答案
您的多行标签或外部 View 需要以某种方式限制其宽度,否则标签会将其宽度扩展到它需要的任何宽度以容纳一行中的文本。如果该行足够长,文本将超出 View 的边缘,这就是您上一张图像中发生的情况。
编辑后:
要在小时列表较短时使 View 居中,但在小时列表较长时仍允许 View 变宽,请给外部 View <= 父 View 的宽度约束。在 IB 中选择您的 View ,然后选择 super View ,然后选择“等宽”,然后将其编辑为 <=。如果列表很短,默认的拥抱优先级将使外部 View 保持较小,但如果列表增长到足以进入多行,您仍然有宽度约束来强制它这样做。
我发现在 IB 中添加这个 <= 约束在旋转时不能正常工作。如果标签是纵向的多行,因此 labelsView(包含 2 个标签的 View )被扩展到屏幕的整个宽度,旋转时 labelsView 保持相同的宽度,而不是调整到新的大小。我认为这是系统中的错误。幸运的是,在代码中添加相同的约束,效果很好。
override func viewDidLoad() {
super.viewDidLoad()
view.addConstraint(NSLayoutConstraint(item: labelsView, attribute: .Width, relatedBy: .LessThanOrEqual, toItem: self.view, attribute: .Width, multiplier: 1, constant: 0))
}
关于 View 中的 iOS swift 多行 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30241087/