Является ли view.leadingAnchor.constraint более высоким приоритетом, чем view.trailingAnchor.constraint? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть код моего 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 ]

1 голос
/ 18 февраля 2020

Хотите, чтобы ваша метка охватывала весь вид с центрированным текстом? Если это так, оставьте ваши ограничения такими, какие они есть, и установите .textAlignment = .center.

. Я установил цвет фона метки на голубой, чтобы вы могли видеть, что происходит:

enter image description here

Тем не менее, я подозреваю, что вы просто хотите, чтобы ваш ярлык был в центре изображения. В этом случае измените ваши ограничения следующим образом:

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

Результат:

enter image description here

1 голос
/ 19 февраля 2020

В iOS 9 и более поздних версиях значение textAlignment по умолчанию для свойства UILabel равно NSTextAlignment.natural , до iOS 9 значением по умолчанию было NSTextAlignment. left

Если вы хотите, чтобы ваша метка охватывала весь вид текстоцентрированным, тогда ваши ограничения идеальны, просто установите

titleLabel.textAlignment = .center
1 голос
/ 18 февраля 2020

До тех пор, пока мы не изменим приоритет ограничения, приоритет по умолчанию равен 1000 для всех. Так что не нужно автоматически устанавливать приоритет.

Для вашего кода добавьте эту строку, и он будет работать.

    titleLabel.textAlignment = .center
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...