iOS swift多行UILabel在视图中

时间:2015-05-14 15:22:46

标签: ios uiview autolayout uilabel multiline

我想完成Interface Builder中下图中所示的内容。基本上两个标签 - 一个多行和一个音符 - 在视图内,视图在页面上水平居中。所以要清楚,我不能在视图上放置宽度约束,否则中心将无法正常工作。 Exmaple

当标签不在视图中但是当我将它放在视图中并设置顶部,左侧和右侧约束时,我可以获得标签,其中实际小时为多行,标签将恢复为单行。

下面的

是视图中标签的约束和属性,以及更新帧时IB所做的图片。任何建议都将不胜感激。

Attributes Hours Value Constraints

标签有一些限制,只有工作时间: Hours Label Constraints

这是我更新帧后的样子

After update frames

1 个答案:

答案 0 :(得分:1)

您的多行标签或外部视图需要以某种方式限制其宽度,否则标签会将其宽度扩展为在一行上容纳文本所需的宽度。如果该行足够长,则文本将从视图边缘运行,这是您上一张图像中出现的情况。

编辑后:

要在小时列表较短时使视图居中,但在小时列表较长时仍允许视图为宽,请为外观提供一个< = width约束到superview。在IB中选择您的视图,然后选择超级视图,并选择"相等的宽度",然后将其编辑为< =。如果列表很短,默认的拥抱优先级将使外部视图保持较小,但如果列表长度足以转到多行,则仍然有宽度约束来强制它执行此操作。

我发现在IB中添加这个< =约束在旋转时没有正常工作。如果标签是纵向多行,因此labelsView(包含2个标签的视图)被扩展到屏幕的整个宽度,在旋转标签View上保持相同的宽度,而不是调整到新的大小。我认为这是系统中的一个错误。幸运的是,在代码中添加相同的约束,工作正常。

override func viewDidLoad() {
    super.viewDidLoad()
    view.addConstraint(NSLayoutConstraint(item: labelsView, attribute: .Width, relatedBy: .LessThanOrEqual, toItem: self.view, attribute: .Width, multiplier: 1, constant: 0))
}