在 iOS 11 中使用增加的 navigation-bar 标题
Use the increased navigation-bar title in iOS 11
iOS 11 Beta 1 对几乎所有 system-apps 使用增加的 navigation-bar 标题(它在 iOS 10 和音乐应用程序中开始这样做)。我想知道 Apple 在 iOS 11 中是否有 public API,或者它是否会暂时保持私有状态。
行为是标题增加了 font-size,左对齐,一旦用户向下滚动,标题就会移动到 navigation-bar。我在此处的“消息”应用程序中附加了一些显示此行为的屏幕:
虽然到目前为止我在UINavigationController
和UINavigationBar
中找不到任何参考,也许有人知道更多细节!
UINavigationBar
API 对于 iOS 11 所做的唯一更改是 prefersLargeTitles
。
此处的文档:https://developer.apple.com/documentation/uikit/uinavigationbar/
您可以对自己的应用程序做一点小改动:在 IB 中检查 "Prefers Large Titles" 导航栏,或者如果您更喜欢在代码中使用:
navigationController?.navigationBar.prefersLargeTitles = true
如果您需要更改大标题的文本属性,您需要在 UINavigationBar
上使用新的 largeTitleTextAttributes
属性:
UINavigationBar.appearance().largeTitleTextAttributes = [
NSAttributedString.Key.foregroundColor: UIColor.black
]
UINavigationBar
有一个 prefersLargeTitles: Bool
属性。 Docs here.
class UINavigationBar {
var prefersLargeTitles: Bool
}
UINavigationItem
有一个 largeTitleDisplayMode: UINavigationItem.LargeTitleDisplayMode
属性。 Docs here.
class UINavigationItem {
var largeTitleDisplayMode: LargeTitleDisplayMode
}
这两个都可以在 Interface Builder 中修改。
要打开此行为,请将 navigationController.navigationBar.prefersLargeTitles
设置为 true
。然后你可以通过设置 navigationItem.largeTitleDisplayMode
.
来控制导航控制器堆栈中的每个单独的视图控制器
Apple 的一般设计准则是不应该在任何地方都使用大标题(例如,时钟应用程序不使用它们),通常最好只有导航控制器的第一级使用大标题标题。但是,这些只是一般准则。
大标题在 What's New in Cocoa Touch video (7:37) 中引入。
if #available(iOS 11.0, *) {
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationItem.largeTitleDisplayMode = .always
} else {
// Fallback on earlier versions
}
请注意,beta 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
}
只需在 Storyboard/Interface Builder 的导航栏属性检查器中检查 "Prefers Large Titles":
由于自 iOS 11 起就可以使用大标题,因此您还必须检查 iOS 版本:
if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = true
}
iOS 11 Beta 1 对几乎所有 system-apps 使用增加的 navigation-bar 标题(它在 iOS 10 和音乐应用程序中开始这样做)。我想知道 Apple 在 iOS 11 中是否有 public API,或者它是否会暂时保持私有状态。
行为是标题增加了 font-size,左对齐,一旦用户向下滚动,标题就会移动到 navigation-bar。我在此处的“消息”应用程序中附加了一些显示此行为的屏幕:
虽然到目前为止我在UINavigationController
和UINavigationBar
中找不到任何参考,也许有人知道更多细节!
UINavigationBar
API 对于 iOS 11 所做的唯一更改是 prefersLargeTitles
。
此处的文档:https://developer.apple.com/documentation/uikit/uinavigationbar/
您可以对自己的应用程序做一点小改动:在 IB 中检查 "Prefers Large Titles" 导航栏,或者如果您更喜欢在代码中使用:
navigationController?.navigationBar.prefersLargeTitles = true
如果您需要更改大标题的文本属性,您需要在 UINavigationBar
上使用新的 largeTitleTextAttributes
属性:
UINavigationBar.appearance().largeTitleTextAttributes = [
NSAttributedString.Key.foregroundColor: UIColor.black
]
UINavigationBar
有一个 prefersLargeTitles: Bool
属性。 Docs here.
class UINavigationBar {
var prefersLargeTitles: Bool
}
UINavigationItem
有一个 largeTitleDisplayMode: UINavigationItem.LargeTitleDisplayMode
属性。 Docs here.
class UINavigationItem {
var largeTitleDisplayMode: LargeTitleDisplayMode
}
这两个都可以在 Interface Builder 中修改。
要打开此行为,请将 navigationController.navigationBar.prefersLargeTitles
设置为 true
。然后你可以通过设置 navigationItem.largeTitleDisplayMode
.
Apple 的一般设计准则是不应该在任何地方都使用大标题(例如,时钟应用程序不使用它们),通常最好只有导航控制器的第一级使用大标题标题。但是,这些只是一般准则。
大标题在 What's New in Cocoa Touch video (7:37) 中引入。
if #available(iOS 11.0, *) {
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationItem.largeTitleDisplayMode = .always
} else {
// Fallback on earlier versions
}
请注意,beta 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
}
只需在 Storyboard/Interface Builder 的导航栏属性检查器中检查 "Prefers Large Titles":
由于自 iOS 11 起就可以使用大标题,因此您还必须检查 iOS 版本:
if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = true
}