У меня есть пользовательский UINavigationBar, который называется MapNavBar. Этот класс объявлен следующим образом:
class MapNavBar: UINavigationBar {
override func sizeThatFits(_ size: CGSize) -> CGSize {
let screenSize = UIScreen.main.bounds.size
let landscape = screenSize.width > screenSize.height
if landscape {
let navBarHeight: CGFloat = 44.0
return CGSize(width: screenSize.width, height: navBarHeight)
}
return super.sizeThatFits(size)
}
}
Пользовательская панель навигации назначается контроллеру навигации следующим образом:
navController.setValue(MapNavBar(), forKeyPath : "navigationBar")
Теперь, когда ориентация меняется на альбомную, я бы хотел, чтобы высота панели навигации была равна стандартной (книжной ориентации) высоте 44. Поэтому в представлении MapController я делаю: WillLayoutSubviews:
override func viewWillLayoutSubviews() {
if let navController = ... {
let screenSize = UIScreen.main.bounds.size
let landscape = screenSize.width > screenSize.height
if landscape {
let navBarHeight = navController.navigationBar.sizeThatFits(screenSize).height
// Resize navBar
navController.navigationBar.frame = CGRect(x: 0, y: 0, width: Int(screenSize.width), height: Int(navBarHeight))
}
}
super.viewWillLayoutSubviews()
}
Несмотря на все усилия, высота пользовательской панели навигации остается равной 32 точкам в альбомной ориентации. Я проверил, и свойство navigationBar контроллера навигации действительно является экземпляром моего пользовательского MapNavBar.
Кто-нибудь знает, почему это происходит и как это исправить?
Спасибо