不能将 UISplitViewController 放在 UITabBarController 内

Posted

技术标签:

【中文标题】不能将 UISplitViewController 放在 UITabBarController 内【英文标题】:Cannot place UISplitViewController inside UITabBarController 【发布时间】:2021-09-02 08:36:52 【问题描述】:

我已经阅读了所有其他对此的回复,它们看起来都很老旧而且似乎不起作用。

我正在尝试使用 UITabBar 创建一个应用程序,并在这些选项卡上设置一个 UISplitViewController。

设置相当简单:

let redViewController = UIViewController()
redViewController.view.backgroundColor = .red
            
let blueViewController = UIViewController()
blueViewController.view.backgroundColor = .blue

let splitViewController = UISplitViewController(style: .doubleColumn)
splitViewController.setViewController(redViewController, for: .primary)
splitViewController.setViewController(blueViewController, for: .secondary)

let tabBarController = UITabBarController()
tabBarController.setViewControllers([splitViewController], animated: false)

window?.rootViewController = tabBarController

我期待什么

我得到了什么

Secondary Primary

【问题讨论】:

【参考方案1】:

UISplitViewControllerios 14 中发生了很大变化,引入了列样式布局。列式拆分视图控制器不能嵌入标签栏控制器,但经典样式的控制器可以。您可以使用除init(style:) 之外的任何初始化程序来创建经典样式的拆分视图控制器。

例如:

let red: UIViewController = ...
let blue: UIViewController = ...

// Note that the pre-iOS 14 initialiser is being used
let splitViewController = UISplitViewController(nibName: nil, bundle: nil)
splitViewController.viewControllers = [red, blue]
splitViewController.tabBarItem = UITabBarItem(tabBarSystemItem: .bookmarks, tag: 0)

let tabBarController = UITabBarController(nibName: nil, bundle: nil)
tabBarController.viewControllers = [splitViewController]

请注意,您不能将 iOS 14 中引入的任何新 API 与经典样式的拆分视图(例如三列布局、拆分行为)一起使用。如果你想使用这个新的 API,你必须使用侧边栏而不是标签栏。

我在反馈助手中报告了这个问题,但显然它正在按预期工作。我想这是 Apple 在 iPad 应用程序中偏爱基于侧边栏的导航而不是标签栏导航的方式。

【讨论】:

【参考方案2】:

您可以从情节提要中看到,

苹果似乎不同意

【讨论】:

以上是关于不能将 UISplitViewController 放在 UITabBarController 内的主要内容,如果未能解决你的问题,请参考以下文章

如何在Landscape中全屏显示UISplitViewController的DetailView

为啥我不能在第一次运行时在 UISplitViewController 中将 Master 和 Detail 视图彼此相邻放置,但在旋转时它可以工作?

在iPad横向模式下隐藏主视图UISplitViewController iOS

将 UIToolBar 放在 UISplitViewController 上方?

如何将视图控制器推送到 UISplitViewController

标签栏 ios6 中的 UISplitViewController