这个:
let label = UILabel()
(0, 0)
在宽度0
和高度处创建一个标签0
。默认情况下,iOS 会frame
根据标签的位置、宽度和高度创建约束。
如果要使用标签的固有大小,请禁用从框架创建约束并提供标签约束以将其放置在视图中。
例如(将标签添加为子视图后):
label.translatesAutoresizingMaskIntoConstraints = false
label.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
label.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
或者您可以label.intrisicContentSize
在创建框架时使用:
label.frame = CGRect(origin: CGPoint(x: 40, y: 100), size: label.intrinsicContentSize)
注意:如果您使用label.intrinsicSize
设置frame
,frame
更改标签文本时不会更改。您必须再次更新它:
label.frame.size = label.intrinsicContentSize
改变后label.text
。
实际上,Auto Layout 为标签创建了 4 个约束instrinsicContentSize
,但这些约束的优先级低于从 中创建的约束frame
,因此它们不起作用。通过禁用从 中创建约束frame
,您可以让较低优先级instrinsicContentSize
的约束有机会影响 的布局UILabel
。
您可以在Apple 的 Auto Layout Guide中标题为Intrinsic Content Size的部分中详细了解这一点。