Подкласс константы NSLayoutConstraint на основе высоты экрана
У меня есть проект с панелью вкладок и пользовательской панелью навигации для каждой из вкладок. Каждый из UIViews панели навигации имеет константу ограничения высоты, установленную в раскадровке.
Я хотел бы подкласс этот NSLayoutConstraint (для высоты навигации), так что он изменяет высоту для iPhone X. панель навигации должна быть намного выше на iPhone X, и поскольку я не использую объекты "из коробки", мои ограничения должны быть установлены вручную.
По существу, я хочу сделать что-то вроде следующего в подклассе, поэтому мне не нужно повторять кучу кода и делать ненужные Выходы:
override func viewWillLayoutSubviews() {
navBarHeightConstraint.constant = navBarHeightConstraintConstant()
}
func navBarHeightConstraintConstant() -> CGFloat {
switch(UIScreen.main.bounds.height) {
case 812: // iPhone X
return 90
default: // all others
return 64
}
}
Я создал подкласс, но не знаю, какие методы использовать для выполнения вышеуказанного кода.
class NavHeightFixiPhoneXConstraint: NSLayoutConstraint {
// Nothing... yet!
}
Как я могу подкласс NSLayoutConstraint так, чтобы он отображал определенное значение только для iPhone X?
1 ответ:
Можно переопределить постоянную переменную:
class NavHeightFixiPhoneXConstraint: NSLayoutConstraint { override var constant: CGFloat { set { super.constant = newValue } get { return navBarHeightConstant() } } fileprivate func navBarHeightConstant() { switch (UIScreen.main.bounds.height) { case 812: return 90 default: return 64 } layoutIfNeeded() } }