Как изменить высоту NavigationBar в iOS 11?
По-видимому, изменение высоты navigationBar привело к новому подходу в iOS 11.
в предыдущих версиях iOS можно было изменить высоту navigationBar, спрятав навигационную панель по умолчанию и добавив новую с настраиваемым фреймом:
self.navigationController?.setNavigationBarHidden(true, animated: false)
let customNavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 64))
self.view.addSubview(customNavigationBar)
Но похоже, что он не работает в бета-версии iOS 11 xCode. независимо от того, какая новая высота, он всегда будет оставаться на уровне 44.
вот что я получил в xCode 9:
![введите описание изображения здесь]()
Кто-нибудь знает, как решить проблему?
Ответы
Ответ 1
Ваш код работает нормально, и в этом нет ничего плохого. Если вы измените цвет фона вашего customNavigationBar
, вы увидите, что вы получите панель навигации с нужной высотой. Но похоже, что проблема с Xcode 9 скрыть панель навигации по умолчанию.
Ваш код:
Xcode 9
![введите описание изображения здесь]()
Xcode 8
![введите описание изображения здесь]()
Как вы можете видеть в изображении Xcode 9, у вас есть настраиваемая панель навигации, но по умолчанию она не скрывается. Вероятно, ошибка в Xcode 9, мне тоже не удалось скрыть ее через Storyboard.
Это похоже на ошибку в Xcode 9, отчеты об ошибках были отправлены в Apple.
Ответ 2
Это скорее взлом, пока Apple не исправляет ошибку. Я столкнулся с той же проблемой, поэтому я изменил верхнее ограничение панели навигации от 0 до 20.
До:
![введите описание изображения здесь]()
После того, как:
![введите описание изображения здесь]()
Если ваш фоновый цвет UINavigationBar отличается от белого, это приведет к тому, что строка состояния будет иметь белый цвет. Вы можете исправить это, добавив следующее в этот конкретный UIViewController.
let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
let statusBarColor = UIColor.red
statusBarView.backgroundColor = statusBarColor
view.addSubview(statusBarView)
До:
![введите описание изображения здесь]()
После того, как:
![введите описание изображения здесь]()
Это кажется длинным взломом, но все же лучше, чем возвращаться и компилироваться с использованием Xcode 8.3.
Ответ 3
Единственный способ, с помощью которого я мог работать, это удалить текущую настраиваемую панель навигации и применить встроенный UINavigationController к UIViewController.
Редактор → Встроенный → Контроллер навигации.
В новых созданных свойствах контроллера навигации в меню "Утилиты" (правая панель) "Имитированные показатели" должен быть указан атрибут "Верхняя панель". В моем случае мне понадобилось значение: "Непрозрачная панель навигации".
Я также устанавливаю то же значение "Top Bar" на моем UIViewController, просто чтобы убедиться.
Таким образом, в вашем распоряжении будет новый "элемент навигации", и вы можете повторно добавить элементы панели.
Это лучшее, что я мог сделать, пока мы ждем обновления Xcode 9, чтобы исправить его.