目标c-iOS 11大标题导航栏不折叠

“在Cocoa Touch WWDC中的新增功能”视频中的苹果人说,新的大标题导航栏将神奇地挂接到基础视图控制器的顶级滚动视图中,并在上下滚动时自动折叠/扩展自身。 (通过“魔术”,他可能意味着他们无法以一种有用的方式将这个功能猴子化到已经令人尴尬的UINavigationController-UITabBarController-UINavigationController API中,因此他们不得不诉诸于幕后的启发式选择的滚动视图)

即使我准备好如果我稍微偏离基本的3007829921571013613632 + UINavigationController/3007829921571071013634,这种“自动”折叠/展开也不起作用,即使在这种最简单的情况下,它似乎也无法按预期工作。

这是我所拥有的:

一个UITabBarController包含一个UINavigationController,一个UIViewController和一个UITableView作为其3007829921571013665。点击表中的第一个单元格将在导航堆栈上推送第二个视图控制器:

storyboard

没有代码,只有情节提要。

我已选中导航栏的“首选大标题”以激活大标题。 现在,如果我运行该应用程序并在表格视图上向上/向下滚动,则导航栏保持不变-大-尺寸; 它不会崩溃:

stuck with large title

但是,我发现如果将第二个视图控制器的导航项设置为使用小的导航栏(通过将“大标题”设置为值“从不”),则如果我打开该页面并向后浏览,则交互式折叠 神奇地开始在第一页上工作:

interactive collapse works after back navigation

我在这里缺少什么,还是此功能无法正常工作? 这是我正在使用的示例项目:[https://github.com/tzahola/iOS-11-Large-Title-Navigation-Bar]

顺便说一句,我使用的是正式发布的iOS 11,而不是Beta。

2017年9月23日更新:我已向Apple发送错误报告,并在openradar.me上打开了一张票证:[http://www.openradar.me/radar?id=5017601935671296]

Tamás Zahola asked 2020-08-12T07:46:21Z
5个解决方案
24 votes

好消息! 我刚刚发现,如果我在情节提要板上将“大标题”设置为“从不”,然后通过代码进行设置,那么它将起作用:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;
}

当导航项通过Interface Builder设置了viewDidLoad时,似乎Apple忘记处理该情况。

因此,在他们解决此问题之前,在情节提要板上将“大标题”保留为“从不”,然后通过代码viewDidLoad进行设置。

您只需要对第一个视图控制器执行此操作。 后续的视图控制器会遵循情节提要中的值。

Tamás Zahola answered 2020-08-12T07:46:40Z
15 votes

如果除了tableView之外还有其他任何视图,还请确保tableView在该视图的顶部,在安全区域的正下方:

enter image description here

kamil3 answered 2020-08-12T07:47:00Z
10 votes

或不更改情节提要中的任何内容,而是这样做:

override func viewDidLoad() {
    super.viewDidLoad()
    if #available(iOS 11.0, *) {
        self.navigationItem.largeTitleDisplayMode = .never
        self.navigationItem.largeTitleDisplayMode = .always
    }
}

无论哪种语言!

这是因为导航项上的大标题会根据先前屏幕导航项标题上的大标题行为来决定是否折叠。

D4ttatraya answered 2020-08-12T07:47:30Z
5 votes

由于我无法发表评论,因此我将在此处分享我发布的答案

[HTTPS://stack overflow.com/啊/47493375/8385022]

我在这个网站上找到了解决方法基本上,如果tableView(或具有滚动的元素)不是视图层次结构中的第一个视图,则大标题将无法自动隐藏。

例子不起作用可行的例子

[HTTPS://Markus拨打女儿.com/2017/10/08/fix-large-navigation-把人-title-not-hiding-on-scroll-in-iOS-11/]

我添加的视图将出现:

        if #available(iOS 11.0, *) {
        navigationController?.navigationBar.prefersLargeTitles = true
    } else {
        // Fallback on earlier versions
    }
Sergio Trejo answered 2020-08-12T07:48:12Z
1 votes

@超级英雄游戏1945

伙计们,我有同样的问题。 通过在导航控制器的第一个View Controller中添加以下代码段,我能够解决此问题

navigationController?.navigationBar.prefersLargeTitles = true
satish answered 2020-08-12T07:48:37Z
translate from https://stackoverflow.com:/questions/46373055/ios-11-large-title-navigation-bar-not-collapsing