以编程方式动态调整 uilabel 宽度的约束

Posted

技术标签:

【中文标题】以编程方式动态调整 uilabel 宽度的约束【英文标题】:Constraints for dynamically size uilabel width programmatically 【发布时间】:2021-01-04 04:29:25 【问题描述】:

我有两个完全以编程方式设置的标签。标签二应始终靠在标签一的右边缘(它们之间有一个小空间)。标签一的宽度设置为等于其内容大小,除非它达到最大宽度。视觉上:

|标签一| |标签二|

我需要以下约束:

    标签一个应该调整宽度,除非它达到最大尺寸。

    标签二应始终位于标签一的右边缘

如何以编程方式设置这些约束?

【问题讨论】:

【参考方案1】:

lessThanOrEqualToConstant widthAnchor 应该可以完成这项工作。

let labelOne = UILabel()
labelOne.text = "label1"
let labelTwo = UILabel()
labelTwo.text = "label2"

labelOne.translatesAutoresizingMaskIntoConstraints = false
labelTwo.translatesAutoresizingMaskIntoConstraints = false

view.addSubview(labelOne)
view.addSubview(labelTwo)

NSLayoutConstraint.activate([
    labelOne.topAnchor.constraint(equalTo: view.topAnchor),
    labelOne.leadingAnchor.constraint(equalTo: view.leadingAnchor),
    labelOne.widthAnchor.constraint(lessThanOrEqualToConstant: 100),
    
    labelTwo.leadingAnchor.constraint(equalToSystemSpacingAfter: labelOne.trailingAnchor, multiplier: 1),
    labelTwo.topAnchor.constraint(equalTo: view.topAnchor)
])

【讨论】:

【参考方案2】:

我同意@Kevvv 的回答,但是您还必须将 labelTwo 的尾随约束分配给视图的尾随,因为如果 labelTwo 的宽度会在内容大小更大时增加。

只需添加一个或多个约束

labeltwo.trailingAnchor.constraint(greaterThanOrEqualTo: view.trailingAnchor)

【讨论】:

以上是关于以编程方式动态调整 uilabel 宽度的约束的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建的 UILabel 的宽度

以编程方式根据行数动态调整 UILabel 的大小

以编程方式动态调整多行 UILabel 和随附的表格视图单元格

AutoLayout 在地图标注中动态调整 UILabel 高度和宽度?

使用自动布局以编程方式调整标签宽度

缺少将 view.top 与动态高度 uilabel 底部连接的约束