Используйте увеличенное название навигационной панели в iOS 11
iOS 11 Beta 1 использует увеличенный заголовок навигационной панели почти для всех системных приложений (она начала делать это в iOS 10 и приложении Music). Мне интересно, есть ли у Apple публичный API для этого в iOS 11, или пока он останется закрытым.
Поведение заключается в том, что заголовок имеет увеличенный размер шрифта, выровнен по левому краю и переместится на панель навигации после прокрутки пользователем вниз. Я прикрепил несколько экранов, показывающих это поведение в приложении Сообщения здесь:
![enter image description here]()
Хотя я до сих пор не нашел ссылки на UINavigationController
и UINavigationBar
, возможно, кто-то знает некоторые подробности!
Ответы
Ответ 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
}