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

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

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

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

5 ответов


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

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

navigationController?.navigationBar.prefersLargeTitles = true

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

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

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

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

As NSForegroundColorAttributeName переименовано в NSAttributedString.Key.foregroundColor использовать:

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

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

class UINavigationBar {
   var prefersLargeTitles: Bool
}

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

class UINavigationItem {
   var largeTitleDisplayMode: LargeTitleDisplayMode
}

оба они могут быть изменены в Построителе интерфейса.

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

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

большие названия вводятся в что нового в Cocoa Touch video (7:37).


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

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


просто проверьте "предпочитает большие заголовки" на панели навигации attribute inspector

enter image description here


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
}