view.leadingAnchor.constraint的优先级是否高于view.trailingAnchor.constraint?

时间:2020-02-18 10:28:33

标签: ios swift xcode

我的ViewController代码如下

class ViewController: UIViewController {

    override func viewDidLoad() {
    super.viewDidLoad()
        view.backgroundColor = .white
        let titleLabel = UILabel()
        titleLabel.text = "Hello World!"

        view.addSubview(titleLabel)
        titleLabel.translatesAutoresizingMaskIntoConstraints = false

        NSLayoutConstraint.activate([
            titleLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            titleLabel.topAnchor.constraint(equalTo: view.topAnchor),
            titleLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            titleLabel.bottomAnchor.constraint(equalTo: view.bottomAnchor),
        ])
    }
}

我期待着我的“ Hello World!”居中对齐。为什么不居中对齐? (实际上,它居中,但在水平方向上则向左对齐,如下所示。)

p / s:如果我移除itleLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor),则它对齐正确。

enter image description here

3 个答案:

答案 0 :(得分:1)

直到,除非我们不更改约束的优先级,否则所有的默认优先级均为1000。因此不会自动设置优先级。

为您的代码添加此行,它将起作用。

    titleLabel.textAlignment = .center

答案 1 :(得分:1)

您是否希望标签以文本为中心 覆盖整个视图 ?如果是这样,请保持约束不变,并设置.textAlignment = .center

我将标签的背景色设置为青色,以便您了解发生的情况:

enter image description here

但是,我怀疑您只是希望标签在视图中居中。在这种情况下,请将您的约束更改为此:

    NSLayoutConstraint.activate([
        titleLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        titleLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor),
    ])

结果:

enter image description here

答案 2 :(得分:1)

在iOS 9和更高版本中,textAlignment的{​​{1}}属性的默认值为NSTextAlignment.natural,在iOS 9之前,默认值为NSTextAlignment.left

如果您希望标签以文本为中心覆盖整个视图,则您的约束是完美的,只需设置

UILabel