相关疑难解决方法(0)

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

在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
Run Code Online (Sandbox Code Playgroud)

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

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

uinavigationbar uisplitviewcontroller ios ios13

18
推荐指数
1
解决办法
2684
查看次数