热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS11大标题导航栏没有崩溃

如何解决《iOS11大标题导航栏没有崩溃》经验,为你挑选了4个好方法。

Cocoa Touch WWDC视频中的新功能中的苹果公司表示,新的大标题导航栏将神奇地挂钩到底层视图控制器的顶级滚动视图,并在向上和向下滚动时自动折叠/展开.(这里的"神奇",他很可能意味着他们没有猴子修补这个功能集成到已经尴尬UINavigationController- UINavigationBar- UINavigationitem在一个可用的方式的API,因此他们不得不求助于挂钩到幕后的一些试探性地选择滚动视图)

即使我准备好这种"自动"崩溃/扩展如果我偏离基本的UINavigationController+ UITableView/ UICollectionView设置稍微不起作用,似乎即使在这个最简单的情况下它也不能按预期工作.

这就是我所拥有的:

一个UITabBarController其中包含了UINavigationController,其中包含了UIViewController,其中有一个UITableView是它的view.点击表格中的第一个单元格将推送导航堆栈上的第二个视图控制器:

故事板

没有代码,只有故事板.

我已经检查了导航栏中的"首选大标题"以激活大型标题.现在,如果我运行应用程序并在表格视图上向上/向下滚动,导航栏保持不变 - 大尺寸; 它没有崩溃:

坚持大标题

但是,我发现如果我将第二个视图控制器的导航项设置为使用小导航栏(通过将"大标题"设置为值"从不"),那么如果我打开该页面并导航回来,则交互式崩溃神奇地开始在第一页上工作:

反向导航后,交互式折叠工作

我在这里遗漏了什么,或者这个功能不能正常工作?这是我正在使用的示例项目:https://github.com/tzahola/iOS-11-Large-Title-Navigation-Bar

顺便说一下,我正在使用官方发布的iOS 11,而不是beta.

2017-09-23更新:我已经向Apple发送了一个错误报告,并在openradar.me上开了一张票:http://www.openradar.me/radar?id = 5017601935671296



1> Tamás Zahola..:

好消息!我刚想通了如果我在故事板上将"大标题"设置为"从不",然后通过代码设置它,那么它可以工作:

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

似乎Apple在导航项largeTitleDisplayMode通过Interface Builder设置时忘记处理这种情况.

因此,在他们解决此问题之前,请在故事板上将"大标题"保留为"从不",并通过代码设置它们viewDidLoad.

您只需要对第一个视图控制器执行此操作.后续视图控制器遵循故事板中的值.



2> 小智..:

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

在此输入图像描述



3> D4ttatraya..:

或者不改变故事板中的任何内容,请执行以下操作:

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

不管是哪种语言!

这是因为导航项上的大标题基于先前屏幕导航项标题上的大标题行为来决定是否折叠.



4> Sergio Trejo..:

由于我不能发表评论,我将在此分享我发布的答案

/sf/ask/17360801/

我基本上在这个站点找到了一个解决方法,如果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
    }


推荐阅读
author-avatar
的士风云
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有