UILabel 只有在定向后才会增长

Posted

技术标签:

【中文标题】UILabel 只有在定向后才会增长【英文标题】:UILabel is growing only after orientation 【发布时间】:2019-07-26 12:59:03 【问题描述】:

我有行数为 0 的 uilabel,并将 4 条边的编程约束设置为超级视图。当我运行时,我看到标签没有显示多行,但是在我第一次定位设备后,它开始显示多行,有什么帮助吗?

private let headerLabel: UILabel = 
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.numberOfLines = 0
    return label
()

    let leading = headerLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor)
    let top = headerLabel.topAnchor.constraint(equalTo: contentView.topAnchor)
   let trailing = headerLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor)
    let bottom = headerLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor)
    NSLayoutConstraint.activate([leading, top, trailing, bottom])

【问题讨论】:

听起来很奇怪。您有任何设置标签的代码吗? 添加到问题中 您的约束未激活...您必须致电leading.activate = true 不,我也添加了约束 NSLayoutConstraint.activate([leading, top, trailing, bottom]) 另外,你在headerLabel 上设置了约束,而你的标签名称是lbl,当你显示部分代码时真的很混乱。另外,您的 superView 可能存在问题..它不够大。可能要打开 viewHiarchy 并检查高度? 【参考方案1】: 将标签水平和垂直固定在超级视图的中间。 添加前导尾随上下约束以大于等于 10

将行数设置为 0

当文本足够大时,您甚至可以让标签滚动。

【讨论】:

这不是解决方案【参考方案2】:

我只是多给 50 个 topAnchor。因此,您可以在状态栏下方看到标签。

private let lbl: UILabel = 
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.numberOfLines = 0
    return label
()

override func viewDidLoad() 
    super.viewDidLoad()

    lbl.text = "The quick brown fox jumps over the lazy dog. "
    view.addSubview(lbl)

    let leading = lbl.leadingAnchor.constraint(equalTo: view.leadingAnchor)
    let top = lbl.topAnchor.constraint(equalTo: view.topAnchor, constant: 50)
    let trailing = lbl.trailingAnchor.constraint(equalTo: view.trailingAnchor)
    let bottom = lbl.trailingAnchor.constraint(equalTo: view.trailingAnchor)

    let constraintArray = [leading,top,trailing,bottom]

    for item in constraintArray 
        item.isActive = true
    

【讨论】:

以上是关于UILabel 只有在定向后才会增长的主要内容,如果未能解决你的问题,请参考以下文章

自动布局约束使 UILabel 对点击更敏感

uilabel sizetofit 不起作用

如果 uilabel 只有一行,则使用 uiLabel 的第二行

UILabel 有时不能正确换行(自动布局)

*只有一个*动画块(UILabel)使用自动布局的问题

多行 UILabel 高度,横向自动布局更高