Кнопки заголовка навигационной панели и навигации не отображаются на iOS 11
До iOS 11 кнопки и заголовок UINavigationBar
отображаются правильно.
Вчера я загрузил Xcode 9 с iOS 11 и после создания и запуска без внесения изменений обе кнопки навигации и название больше не отображаются. Он показывает UINavigationBar
с правильным цветом, который я устанавливаю, но ничего больше.
Я пробовал на разных тренажерах, а также обновил iPhone 7 до iOS 11 beta 5, и результат тот же. Ничего не отображается.
Кто-то сталкивался с такой же проблемой? Я попытался изменить разные части кода и раскадровки, но ничего не влияет...
EDIT со снимками экрана: http://imgur.com/a/Hy46c
Спасибо заранее!
Ответы
Ответ 1
Для Xcode 9 кажется, что уже недостаточно просто установить кадр пользовательского представления, которое вводится в заголовок titleI. Внутренний размер содержимого вашего TitleView теперь должен быть переопределен и установлен также.
Здесь код, отрегулируйте ширину и высоту в соответствии с вашими потребностями:
class NavigationBarTitleView: UIView {
override var intrinsicContentSize: CGSize {
return CGSize(width: bounds.width - 100, height: 50)
}
...
}
Ответ 2
У меня была такая же проблема в моем проекте, где заголовки отсутствовали в навигационных барах после обновления до Xcode 9 и iOS 11. Я решил это, перейдя в панель навигации моего контроллера навигации на раскадровке, сохраняя предпочтение Large Заголовки не отмечены и изменяются шрифт заголовка под атрибутами "Текст заголовка", который по умолчанию был установлен в Xcode 9 в System 0 для какой-либо другой опции, такой как Caption 1 или Headline. Я также изменил настройки навигационной панели children viewcontrollers для Large Title to Never вместо Automatic или Always.
Ответ 3
Попробуйте использовать:
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
или без настройки прокси-сервера непосредственно в текущую навигационную панель... Он решает мою проблему, если Apple изменит заголовокText, чтобы очистить по умолчанию в iOS11...?
Также используйте это, если вы хотите выглядеть так же, как iOS 10:
if #available(iOS 11, *) {
nav.navigationBar.prefersLargeTitles = false
}
Ответ 4
У меня была такая же проблема, и для меня это было вызвано подклассификацией UITabBarController
Ответ 5
Вы установили "window, rootViewController =..." в свой код? Попробуйте удалить его, чтобы исправить вашу проблему.
Ответ 6
Была ли та же проблема с навигационной панелью не отображаться. Я решил это, установив для параметра renderingMode значение .alwaysOriginal
. (Я не использовал шаблоны)
Код Swift 3:
var img =R.image.smt()?.withRenderingMode(.alwaysOriginal)
Ответ 7
У меня была такая же проблема, и ни одна из вышеперечисленных проблем не была исправлена.
Хотя, @Justin Валлели привести ко мне исправить это.
Все, что я сделал, это установить width
на titleView
, и все сработало просто отлично!
EDIT:
Каждый UIViewController
имеет свойство navigationItem
, и каждый navigationItem
имеет необязательный titleView
.
Для справки: https://developer.apple.com/documentation/uikit/uinavigationitem/1624935-titleview
В моем случае я использовал пользовательский titleView
, и я думаю, что причина проблемы, поскольку Apple изменила API для поддержки новой макетной панели навигации.
Ответ 8
Основываясь на комментарии Justin Vallely, я немного переработал код, чтобы обеспечить правильное определение размера:
class NavigationBarTitleView: UIView {
private var width: CGFloat = 0.0
private var height: CGFloat = 0.0
override init(frame: CGRect) {
super.init(frame: frame)
width = frame.width
height = frame.height
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override var intrinsicContentSize: CGSize {
return CGSize(width: width, height: height)
}
}
В моем конкретном случае я использовал это представление в качестве контейнера для UISearchBar, и теперь он имеет нужный размер и отлично работает с Swift 4 и iOS 11, так же как и для предыдущих версий iOS и Swift.
Ответ 9
Мы столкнулись с той же проблемой, что и цвет панели навигации, но заголовок и кнопки не отображаются. Мы дважды проверили, что бар был там, вызвав изменение цвета фона на панели навигации через 2 секунды после появления на экране навигационного контроллера, поэтому мы знаем, что панель навигации была там, и мы добавляли кнопки в правильный экземпляр. То же, что и OP, эта проблема появляется только на iOS 11, а не на iOS 10, и мы используем Swift 3.2 с Xcode 9.1.
После нескольких часов работы, оказывается, что представление навигационного контроллера, а затем сделать его как UIApplication.shared.delegate.window.rootViewController(после текущей анимации) вызвало проблему в нашем случае.
Если вы просто пропустите текущий контроллер представления и сделаете контроллер навигации в качестве контроллера корневого представления, тогда все будет хорошо. Конечно, вы теряете текущую анимацию в этом случае.
Ответ 10
использовать sizeToFit()! ios 11 автоматически определяет размер, но ios 10 не
Ответ 11
Я нашел этот код в некоторой наследуемой кодовой базе, прокомментировал это, и все работало так же, как и до iOS 11.x.
if (appDelegate.window.rootViewController != self) {
appDelegate.window.rootViewController = self;
}