View 中的 iOS swift 多行 UILabel

标签 ios uiview autolayout uilabel multiline

我想在 Interface Builder 中完成下图中显示的内容。基本上是两个标签——一个多行标签和一个注释——在一个 View 中,并且该 View 在页面上水平居中。所以要清楚,我不能对 View 施加宽度限制,否则居中将无法正常工作。 Exmaple

当标签不在 View 中时,我可以获得带有实际小时数的多行标签,但是当我将它放在 View 中并设置顶部、左侧和右侧约束时 - 标签恢复为单行.

下面是 View 中标签的约束和属性,以及更新框架时 IB 所做操作的图片。任何建议将不胜感激。

Attributes Hours Value Constraints

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

这是我更新帧后的样子

After update frames

最佳答案

您的多行标签或外部 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/

相关文章:

ios - 如何在 iOS Swift 中向多个 ViewController 添加一个公共(public) View ?

ios - 如何删除 UITableView NSAutoresizingMaskLayoutConstraint?

ios - 定位和缩放启动屏幕图像

ios - 如何防止多个用户在应用内购买时使用相同的 Apple ID

ios - 启用 guard malloc 时出现奇怪的错误

ios - UIView 约束 TextView contentSize Bug

iphone - 如果用自定义子类替换默认 View ,则 cornerRadius 不起作用

ios - UIView 未调整大小以填充 iPhone 6 窗口

iphone - 在 iOS5 中将 kAudioUnitSubType_Varispeed 添加到 AUGraph

ios - UIImagePickerController 使用照片/重拍按钮不起作用