使用 NSLayout 以编程方式向 UILabel 添加约束

Posted

技术标签:

【中文标题】使用 NSLayout 以编程方式向 UILabel 添加约束【英文标题】:Adding constraint to UILabel Programatically with NSLayout 【发布时间】:2020-01-09 19:27:02 【问题描述】:

我正在尝试将 UILabel 添加到我的 ViewController 并使用 NSLayout 来约束它。但是,当我尝试使用 NSLayout 时,UILabel 甚至没有出现在我的视图中。有人知道解决办法吗?

      excersice1label = UILabel()
      excersice1label.textAlignment = .center
      excersice1label.text = "Excercise 1"
      excersice1label.font = UIFont.boldSystemFont(ofSize: 20)
      view.addSubview(excersice1label)

      NSLayoutConstraint.activate([
        excersice1label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        excersice1label.centerYAnchor.constraint(equalTo: view.centerYAnchor ,constant: -110),
        excersice1label.widthAnchor.constraint(equalToConstant: view.frame.width - 64)
        ])

【问题讨论】:

(1) 观看控制台。 Xcode 控制台会准确地告诉您问题出在哪里。 (2) 这个词是“锻炼”。 @matt 谢谢,是的,我已经有一个不同的标签来称为锻炼,所以我命名了这个锻炼。 【参考方案1】:

你需要添加这一行:

exercise1label.translatesAutoresizingMaskIntoConstraints = false

据苹果documentation:

如果该属性的值为真,系统会创建一组 复制视图指定的行为的约束 自动调整蒙版。如果你想使用自动布局来动态 计算你的视图的大小和位置,你必须设置这个 属性为假,然后提供一个非模棱两可的、非冲突的 视图的一组约束。

【讨论】:

以上是关于使用 NSLayout 以编程方式向 UILabel 添加约束的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中以编程方式添加约束不起作用

对子类 UIView 的约束会抛出以编程方式创建的 UILabel 位置

使用 NSLayout 设置 UILabel 的 X 和 Y 值

如何以编程方式向以编程方式创建的 UIView 添加约束?

Avalonia:如何以编程方式向 UserControl 添加控件

以编程方式向 PayPal 收取定期付款的费用