Создание категории и переопределение sizeThatFits (_ size: CGSize) -> CGSize метод изменяет размер UINavigationBar по всему приложению. Предполагая, что вы хотите изменить высоту / размер UINavigationBar только в одном конкретном ViewController (в моем случае)
Вот как я это сделал.
extension UINavigationBar {
open override func sizeThatFits(_ size: CGSize) -> CGSize {
let v = self.value(forKey: "frame") as? CGRect
return v?.size ?? CGSize(width: UIScreen.main.bounds.width, height: 44)
}
}
в вызывающем ViewController будет выглядеть как
override func viewDidLoad() {
super.viewDidLoad()
configureNavigationBar()
}
private func configureNavigationBar() {
var naviBarFrame = self.navigationController?.navigationBar.frame
naviBarFrame?.size.height = 74
let rect = naviBarFrame ?? CGRect(x: 0, y: 20, width: UIScreen.main.bounds.width, height: 74)
self.navigationController?.navigationBar.setValue(rect, forKey: "frame")
}