rma*_*ddy 18 uinavigationbar uisplitviewcontroller ios ios13
在iOS 13下,如果您在导航控制器中设置了可滚动的根视图控制器(例如UITableViewController),然后将该导航控制器放在UISplitViewController的详细信息窗格中,那么当滚动内容为时,导航栏的背景将不可见。在顶部。
通过基于“主/详细信息”模板创建一个新的iOS项目,您可以看到此信息。然后修改情节提要以在详细信息窗格的导航控制器中使用UITableViewController。将设备/模拟器置于“亮外观”模式(它比“暗”模式更好地显示了问题)。运行应用程序,并注意导航栏区域的颜色与表格视图背景的颜色相同。现在向上滚动表格视图,导航栏颜色将变为标准的浅灰色。让表格视图返回顶部,导航栏颜色再次消失。
我仅在拆分视图控制器的详细信息窗格中看到了这一点。
如何关闭此“功能”,以使导航栏看起来正常,就像在拆分视图控制器的详细信息窗格以外的其他任何地方使用的所有其他导航栏一样?
UISplitViewController或没有相关的API更改UISplitViewControllerDelegate。UINavigationController两者都没有。
经过一番挖掘后,我找到了一种解决方法,但我很想找到一种避免这样做的方法。
在UINavigationBar类现在有用于设置其外观的一些新特性。奇怪的是,在的文档中的“自定义导航栏的外观”下没有提及这些UINavigationBar。
iOS 13中有三个新属性:
standardAppearancecompactAppearancescrollEdgeAppearance这三个都是类型UINavigationBarAppearance。
默认情况下仅设置第一个。
即使scrollEdgeAppearance是nil,拆分控制器的详细信息窗格的行为也好像已将其backgroundColor设置为clear颜色一样。
因此,解决方法是将以下行添加到viewDidLoad导航控制器的根视图控制器的方法:
navigationController?.navigationBar.scrollEdgeAppearance = navigationController?.navigationBar.standardAppearance
Run Code Online (Sandbox Code Playgroud)
为什么仅在这种情况下才需要?除了添加此代码,还有其他更正确的解决方案吗?
我注意到,苹果的任何应用程序(至少包括Mail,Notes和Files)似乎都没有使用此“功能”。
| 归档时间: |
|
| 查看次数: |
2684 次 |
| 最近记录: |