不能将 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】:UISplitViewController
在 ios 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 上方?