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

iOS13中UISplitViewController的详细信息窗格中的新UINavigationBar外观

如何解决《iOS13中UISplitViewController的详细信息窗格中的新UINavigationBar外观》经验,为你挑选了1个好方法。

在iOS 13下,如果您在导航控制器中设置了可滚动的根视图控制器(例如UITableViewController),然后将该导航控制器放在UISplitViewController的详细信息窗格中,那么当滚动内容为时,导航栏的背景将不可见。在顶部。

通过基于“主/详细信息”模板创建一个新的iOS项目,您可以看到此信息。然后修改情节提要以在详细信息窗格的导航控制器中使用UITableViewController。将设备/模拟器置于“亮外观”模式(它比“暗”模式更好地显示了问题)。运行应用程序,并注意导航栏区域的颜色与表格视图背景的颜色相同。现在向上滚动表格视图,导航栏颜色将变为标准的浅灰色。让表格视图返回顶部,导航栏颜色再次消失。

我仅在拆分视图控制器的详细信息窗格中看到了这一点。

如何关闭此“功能”,以使导航栏看起来正常,就像在拆分视图控制器的详细信息窗格以外的其他任何地方使用的所有其他导航栏一样?

UISplitViewController或没有相关的API更改UISplitViewControllerDelegateUINavigationController两者都没有。

经过一番挖掘后,我找到了一种解决方法,但我很想找到一种避免这样做的方法。

UINavigationBar类现在有用于设置其外观的一些新特性。奇怪的是,在的文档中的“自定义导航栏的外观”下没有提及这些UINavigationBar

iOS 13中有三个新属性:

standardAppearance

compactAppearance

scrollEdgeAppearance

这三个都是类型UINavigationBarAppearance

默认情况下仅设置第一个。

即使scrollEdgeAppearancenil,拆分控制器的详细信息窗格的行为也好像已将其backgroundColor设置为clear颜色一样。

因此,解决方法是将以下行添加到viewDidLoad导航控制器的根视图控制器的方法:

navigationController?.navigationBar.scrollEdgeAppearance = navigationController?.navigationBar.standardAppearance

为什么仅在这种情况下才需要?除了添加此代码,还有其他更正确的解决方案吗?

我注意到,苹果的任何应用程序(至少包括Mail,Notes和Files)似乎都没有使用此“功能”。



1> Jordan H..:

您发现的解决方法是禁用此行为的“官方”方式,正如Apple的iOS系统体验团队的David Duncan 在Twitter上的帖子中所解释的。

为了控制UINavigationBar完全展开时会发生什么,您需要设置scrollEdgeAppearance。通过将standardAppearance和scrollEdgeAppearance设置为相同的值,您将获得一个不变的条形。

不会禁用此行为的Apple应用程序是“设置”应用程序。


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