0

以下代码的结果是:我没有看到标签。

我的理解是标签的 intrinsicSize 将允许标签拉伸。为什么没有发生这种情况?

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(label)
    }

    let label : UILabel = {
        let label = UILabel()
        label.text = "How are you doing today my friend"
        label.backgroundColor = .orange

        return label
    }()
}
4

2 回答 2

1

这个:

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设置frameframe更改标签文本时不会更改。您必须再次更新它:

label.frame.size = label.intrinsicContentSize

改变后label.text


实际上,Auto Layout 为标签创建了 4 个约束instrinsicContentSize,但这些约束的优先级低于从 中创建的约束frame,因此它们不起作用。通过禁用从 中创建约束frame,您可以让较低优先级instrinsicContentSize的约束有机会影响 的布局UILabel

您可以在Apple 的 Auto Layout Guide中标题为Intrinsic Content Size的部分中详细了解这一点。

于 2017-12-22T22:24:10.183 回答
0

它是内在内容大小而不是内在内容位置保证为标签提供宽度和高度如果它没有严格地具有可能修剪其内容的前导和尾随约束,但至少您必须通过框架布局或自动布局但要设置

  translatesAutoresizingMaskIntoConstraints to false
于 2017-12-22T22:34:55.527 回答