Кнопки заголовка навигационной панели и навигации не отображаются на 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;
}