向上滚动时隐藏大标题

Hide large title when scrolling up

我有一个嵌入在导航控制器中的普通视图控制器。在这个视图控制器中,我有一个使用安全区域约束的 table 视图。 (我不使用 table 视图控制器)

导航控制器设置为首选大标题,模式设置为 .always。在 beta 2 中,这非常有效,所以当我进入标题时它很大,当我向下滚动时它变小了(就像正常的一样)。但是从 beta 3 开始,这不再有效了。

任何人都知道如何重新打开它,或者如何使它在我滚动 table 视图时变得更小。喜欢所有新 iOS 11 个应用程序的行为吗?

或者这是 swift 4/iOS 11 当前版本中的错误,但 Messenger 和设置等应用程序仍然以这种方式工作。

提前致谢。

在 IB 中为您的导航栏选中“Prefers Large Titles”,或使用:

navigationController?.navigationBar.prefersLargeTitles = true

对我来说,如果你将情节提要中的布尔值 "Prefers Large Titles" 设置为 true,它会保持很大,如果你通过代码打开它,它会按预期工作!

(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.y > 0) { //20
        [self.navigationController.navigationBar setPrefersLargeTitles:NO];
    } else {   
        [self.navigationController.navigationBar setPrefersLargeTitles:YES];
    }    
}

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

https://markusbodner.com/2017/10/08/fix-large-navigation-bar-title-not-hiding-on-scroll-in-ios-11/

我在视图上添加了 willAppear:

if #available(iOS 11.0, *) {
    navigationController?.navigationBar.prefersLargeTitles = true
} else {
    // Fallback on earlier versions
}

我正在使用程序化布局,运行 遇到类似的大标题问题。我在这里找到了解决方案:https://whosebug.com/a/46692583/131378。在 viewDidLoad() 中,我不得不关闭并重新打开 largeTitleDisplayMode。这是使大标题与滚动一起工作的正确组合:

self.navigationItem.largeTitleDisplayMode = .never
self.navigationItem.largeTitleDisplayMode = .always