Авто-макет в представлении для заголовка панели навигации - PullRequest
0 голосов
/ 03 января 2019

У меня есть простой класс, который создает UIView, содержащий метку.Я хочу использовать этот вид в качестве центральной части UINavigationBar, с 2 кнопками с каждой стороны.Код ниже работает хорошо без добавления метки:

class myView : UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)

        self.backgroundColor = .green
    }
}

Я называю класс так:

let avatar = UIBarButtonItem(image: avatarImage, ...)
let otherButton = UIBarButtonItem(image: otherImage, ...)

navigationItem.leftBarButtonItems  = [avatar]
navigationItem.rightBarButtonItems = [otherButton]

let headerTitle = myView(frame: .zero)
headerTitle.translatesAutoresizingMaskIntoConstraints = false
navigationItem.titleView = headerTitleView

Но если я добавлю метку внутри UIView:

class myView : UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)

        self.backgroundColor = .green

        let theLabel = UILabel(frame: .zero)
        theLabel.text = "The Title"
        theLabel.textAlignment = .center
        theLabel.translatesAutoresizingMaskIntoConstraints = false

        self.addSubview(theLabel!)
    }
}

.. Я вижу ярлык, но он застрял слева от вида.Если я попытаюсь добавить ограничения к метке, что-то вроде этого:

NSLayoutConstraint.activate([
    theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
    theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])

.. он падает, так как размер self (UIView) все еще равен .zero.

I 'Мы пробовали различные комбинации layoutIfNeeded() и sizeToFit(), но пока безуспешно.Как разместить вид в качестве заголовка для панели навигации и элементы макета внутри этого вида?

1 Ответ

0 голосов
/ 03 января 2019

Я думаю, это ошибка заказа

self.addSubview(theLabel) // first
NSLayoutConstraint.activate([  // then second
  theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
  theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])
...