UITabBarController 中的 UISplitViewController - SplitView 导航栏故障/错误或我做错了什么?
UISplitViewController in UITabBarController - SplitView Navigation Bar Glitch / Bug or me doing something wrong?
POST
结尾的问题
问题: 将 UISplitViewController
嵌入 UITabBarController
时,我发现了一个奇怪的行为。设置非常简单,无需任何编码即可复制。创建一个基于 StoryBoard 的应用程序并将 UITabBarController
拖到 StoryBoard 上并使其成为初始视图控制器。然后拖一个UISplitViewController
到棋盘上,使它成为UITabBarController
的一个项目。将 UISplitViewControllers
细节视图控制器也嵌入到 UINavigationController
中。最后,将主视图控制器和细节视图控制器的背景颜色设置为引人注目的颜色。
故事板应如下所示:
第1步: 运行设备上的应用程序可以同时显示主要和详细信息(例如iPad或大屏幕iPhone).您应该注意到母版没有延伸到栏下,而是 UISplitViewController
的背景闪耀。
第 2 步: 将屏幕旋转为纵向,以便母版折叠。从侧面轻扫以显示主人。此时,两个导航栏都显示正确的背景颜色。
第 3 步: 将屏幕旋转回横向。现在细节有 UISplitViewController
的背景,母版显示正确的颜色。
调查结果:
- 启动时,master 的 tableview 没有在导航栏下扩展。
- 当且仅当以纵向模式显示母版然后向后旋转时,故障发生变化,现在母版延伸到条形图下方,细节不再出现。
- 如果不显示纵向的主人,您可以根据需要旋转任意多次而不改变行为
- 只发生在可以同时显示master和detail的设备上
- 只有在
UITabBarController
中嵌入 UISplitViewController
时才会发生
问题:
- 为什么 master 和 detail 在它们的导航栏下没有正确展开?
- 为什么这只发生在 iPad/iPhone Plus 而不是常规的 iPhones(一切都按预期工作)?
- 我可以应用任何修复程序来使这项工作在 iPad 上运行吗?
- 有没有比嵌入主从流程的 TabBar 更好的设计方法?对我来说,TabBar 似乎适合在我的应用程序中的不同类型的内容之间切换,我不想在 iPads 上有一个全宽的表格视图。 SplitViewController 似乎也是显示我的内容的正确方法...
5 个月后仍然没有解决这个问题。此外,当我在开发另一个应用程序时再次遇到这个问题时,我发现这个 2015 年的旧 post 有同样的问题:Navigation bar for split view controller is darker when inside a tab bar controller
所以我猜 Apple 无意修复他们自己的控制器,我们开发人员被搞砸了。我们可以在底部有一个 UITabBar,同时在上面显示一个带有适当的半透明 UINavigationBars 的 UISplitViewController 的唯一方法是实现我们自己的容器视图控制器。
我终于解决了这个问题,方法是使用一个普通的 UIViewController,UITabBar 固定在底部,同时使用 UIViewController 容器 API 到 show/hide 我的 UISplitViewControllers。
POST
结尾的问题问题: 将 UISplitViewController
嵌入 UITabBarController
时,我发现了一个奇怪的行为。设置非常简单,无需任何编码即可复制。创建一个基于 StoryBoard 的应用程序并将 UITabBarController
拖到 StoryBoard 上并使其成为初始视图控制器。然后拖一个UISplitViewController
到棋盘上,使它成为UITabBarController
的一个项目。将 UISplitViewControllers
细节视图控制器也嵌入到 UINavigationController
中。最后,将主视图控制器和细节视图控制器的背景颜色设置为引人注目的颜色。
故事板应如下所示:
第1步: 运行设备上的应用程序可以同时显示主要和详细信息(例如iPad或大屏幕iPhone).您应该注意到母版没有延伸到栏下,而是 UISplitViewController
的背景闪耀。
第 2 步: 将屏幕旋转为纵向,以便母版折叠。从侧面轻扫以显示主人。此时,两个导航栏都显示正确的背景颜色。
第 3 步: 将屏幕旋转回横向。现在细节有 UISplitViewController
的背景,母版显示正确的颜色。
调查结果:
- 启动时,master 的 tableview 没有在导航栏下扩展。
- 当且仅当以纵向模式显示母版然后向后旋转时,故障发生变化,现在母版延伸到条形图下方,细节不再出现。
- 如果不显示纵向的主人,您可以根据需要旋转任意多次而不改变行为
- 只发生在可以同时显示master和detail的设备上
- 只有在
UITabBarController
中嵌入
UISplitViewController
时才会发生
问题:
- 为什么 master 和 detail 在它们的导航栏下没有正确展开?
- 为什么这只发生在 iPad/iPhone Plus 而不是常规的 iPhones(一切都按预期工作)?
- 我可以应用任何修复程序来使这项工作在 iPad 上运行吗?
- 有没有比嵌入主从流程的 TabBar 更好的设计方法?对我来说,TabBar 似乎适合在我的应用程序中的不同类型的内容之间切换,我不想在 iPads 上有一个全宽的表格视图。 SplitViewController 似乎也是显示我的内容的正确方法...
5 个月后仍然没有解决这个问题。此外,当我在开发另一个应用程序时再次遇到这个问题时,我发现这个 2015 年的旧 post 有同样的问题:Navigation bar for split view controller is darker when inside a tab bar controller
所以我猜 Apple 无意修复他们自己的控制器,我们开发人员被搞砸了。我们可以在底部有一个 UITabBar,同时在上面显示一个带有适当的半透明 UINavigationBars 的 UISplitViewController 的唯一方法是实现我们自己的容器视图控制器。
我终于解决了这个问题,方法是使用一个普通的 UIViewController,UITabBar 固定在底部,同时使用 UIViewController 容器 API 到 show/hide 我的 UISplitViewControllers。