64

iOS 11 Beta 1 对几乎所有系统应用程序都使用了增加的导航栏标题(它在 iOS 10 和音乐应用程序中开始这样做)。我想知道 Apple 是否在 iOS 11 中为此提供了一个公共 API,或者它现在是否会保持私有。

行为是标题具有增加的字体大小,左对齐并且一旦用户向下滚动就会移动到导航栏。我在此处的 Messages 应用程序中附加了一些显示此行为的屏幕:

在此处输入图像描述

虽然到目前为止我找不到任何参考资料,但UINavigationController也许有人知道更多细节!UINavigationBar

4

6 回答 6

118

UINavigationBar对 iOS 11 的 API所做的唯一更改是prefersLargeTitles.

此处的文档:https ://developer.apple.com/documentation/uikit/uinavigationbar/

您可以对自己的应用程序进行一点小改动:在 IB 中为您的导航栏选中“Prefers Large Titles”,或者如果您更喜欢在代码中使用:

navigationController?.navigationBar.prefersLargeTitles = true

如果您需要更改大标题的文本属性,则需要在以下位置使用新largeTitleTextAttributes属性UINavigationBar

UINavigationBar.appearance().largeTitleTextAttributes = [
    NSAttributedString.Key.foregroundColor: UIColor.black
]
于 2017-06-07T10:38:03.800 回答
12

UINavigationBar有财产prefersLargeTitles: Bool文档在这里

class UINavigationBar {
   var prefersLargeTitles: Bool
}

UINavigationItem有财产largeTitleDisplayMode: UINavigationItem.LargeTitleDisplayMode文档在这里

class UINavigationItem {
   var largeTitleDisplayMode: LargeTitleDisplayMode
}

这两个都可以在 Interface Builder 中进行修改。

要打开此行为,请设置navigationController.navigationBar.prefersLargeTitlestrue. 然后,您可以通过设置来控制导航控制器堆栈中的每个单独的视图控制器navigationItem.largeTitleDisplayMode

Apple 的一般设计准则是不应该在任何地方使用大标题(例如,时钟应用程序不使用它们),并且通常首选只有第一级导航控制器使用大标题。但是,这些只是一般准则。

Cocoa Touch 视频(7:37)中介绍了大标题。

于 2017-06-09T01:45:35.143 回答
8

只需在 Storyboard / Interface Builder 的导航栏属性检查器中选中“首选大标题”:

在此处输入图像描述

于 2017-12-25T15:06:13.967 回答
7
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
}
于 2017-09-21T17:34:00.217 回答
6
if #available(iOS 11.0, *) {
    self.navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationItem.largeTitleDisplayMode = .always
} else {
    // Fallback on earlier versions
}

请注意,beta 1 中有一些错误会导致大标题仅在您手动向上滚动时出现。

于 2017-06-19T10:19:00.223 回答
0

由于自 iOS 11 起提供大标题,您还必须检查 iOS 版本:

if #available(iOS 11.0, *) {
    navigationController?.navigationBar.prefersLargeTitles = true
}
于 2019-07-03T07:28:54.527 回答