Используйте увеличенное название навигационной панели в iOS 11 - программирование
Подтвердить что ты не робот

Используйте увеличенное название навигационной панели в iOS 11

iOS 11 Beta 1 использует увеличенный заголовок навигационной панели почти для всех системных приложений (она начала делать это в iOS 10 и приложении Music). Мне интересно, есть ли у Apple публичный API для этого в iOS 11, или пока он останется закрытым.

Поведение заключается в том, что заголовок имеет увеличенный размер шрифта, выровнен по левому краю и переместится на панель навигации после прокрутки пользователем вниз. Я прикрепил несколько экранов, показывающих это поведение в приложении Сообщения здесь:

enter image description here

Хотя я до сих пор не нашел ссылки на UINavigationController и UINavigationBar, возможно, кто-то знает некоторые подробности!

4b9b3361

Ответ 1

Единственное изменение, prefersLargetitles в UINavigationBar API для iOS 11, - это prefersLargetitles только для prefersLargetitles. проверьте здесь

Вы можете сделать это для своих собственных приложений с одним небольшим изменением: установите флажок "Предпочитает большие заголовки" для панели навигации в IB или, если вы предпочитаете делать это в коде, используя

navigationController?.navigationBar.prefersLargeTitles = true

редактировать

Если вам нужно изменить атрибуты текста большого заголовка, вам нужно использовать новое свойство largeTitleTextAttributes на UINavigationBar:

UINavigationBar.appearance().largeTitleTextAttributes = [
    NSForegroundColorAttributeName: UIColor.white
]

Обновление для Swift 4.2:

Поскольку NSForegroundColorAttributeName было переименовано в NSAttributedString.Key.foregroundColor, используйте:

  UINavigationBar.appearance().largeTitleTextAttributes = [
      NSAttributedString.Key.foregroundColor: UIColor.black
  ]

Ответ 2

UINavigationBar имеет свойство prefersLargeTitles: Bool. Документы здесь.

class UINavigationBar {
   var prefersLargeTitles: Bool
}

UINavigationItem имеет свойство largeTitleDisplayMode: UINavigationItem.LargeTitleDisplayMode. Документы здесь.

class UINavigationItem {
   var largeTitleDisplayMode: LargeTitleDisplayMode
}

Оба они могут быть изменены в Interface Builder.

Чтобы включить это поведение, установите navigationController.navigationBar.prefersLargeTitles в true. Затем вы можете управлять каждым отдельным контроллером представления в стеке контроллера навигации, установив navigationItem.largeTitleDisplayMode.

Общие принципы проектирования Apple заключаются в том, что большие заголовки не должны использоваться повсюду (например, приложение Clock не использует их), и обычно предпочитают, чтобы только первый уровень контроллера навигации использовал большие заголовки. Однако это всего лишь общие рекомендации.

В Что нового в Cocoa Touch video (7:37).

Ответ 3

Просто отметьте "Предпочитает большие заголовки" в инспекторе атрибутов панели навигации.

enter image description here

Ответ 4

if #available(iOS 11.0, *) {
    self.navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationItem.largeTitleDisplayMode = .always
} else {
    // Fallback on earlier versions
}

Обратите внимание, что в бета-версии есть некоторые ошибки, которые вызывают появление большого заголовка при ручном просмотре.

Ответ 5

if #available(iOS 11.0, *) {
    navigationController?.navigationBar.prefersLargeTitles = true
    navigationController?.navigationBar.topItem?.title = "Hello"
    navigationController?.navigationItem.largeTitleDisplayMode = .automatic

    let attributes = [
        NSAttributedStringKey.foregroundColor : UIColor.red,
        ]

    navigationController?.navigationBar.largeTitleTextAttributes = attributes
} else {
    // Fallback on earlier versions
}

Ответ 6

Поскольку начиная с iOS 11 доступны большие заголовки, вы также должны проверить версию iOS:

    if #available(iOS 11.0, *) {
        navigationController?.navigationBar.prefersLargeTitles = true
    }