У меня есть простой класс, который создает 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()
, но пока безуспешно.Как разместить вид в качестве заголовка для панели навигации и элементы макета внутри этого вида?