Используйте увеличенный заголовок навигационной панели в 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 есть некоторые ошибки, из-за которых большой заголовок появляется только при прокрутке вручную.
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
}