UISplitViewController有一个UINavigationController作为Master&与自己的根控制器的详细关系.
Master UINavigationController rootController具有Detail UINavigationController的细节segue.
看这里:
一切都很简单吧?现在在TableViewController中我执行以下操作;
class TableViewController: TableViewController,UISplitViewControllerDelegate { var collapseDetailViewController: Bool = false override func viewDidLoad() { super.viewDidLoad() splitViewController?.delegate = self } override func tableView(tableView: UITableView,didSelectRowAtIndexPath indexPath: NSIndexPath) { collapseDetailViewController = false } // MARK: - UISplitViewControllerDelegate func splitViewController(splitViewController: UISplitViewController,collapseSecondaryViewController secondaryViewController: UIViewController,ontoPrimaryViewController primaryViewController: UIViewController) -> Bool { return false }
我也有一个UISplitViewController扩展并执行以下操作;
extension UISplitViewController: UISplitViewControllerDelegate { public override func viewDidLoad() { self.extendedLayoutIncludesOpaqueBars = true } }
完成所有这些后,我遇到了以下问题;
>当点击tableviewcell以切换到详细视图时,在iPad上横向而不是右侧时,主左窗格内将打开详细视图.我也无法弄清楚如何在iPad或iPhone上使用Portrait时将Master View显示为第一个视图.这两个问题可能有关,也可能没有关系我不确定.
>在移动设备上,标签栏上方有一个底栏,我无法弄清楚如何删除.我在iPad上遇到了同样的问题,直到我在UISplitViewController扩展viewDidLoad中添加了代码,但这并没有影响移动设备.看这里,
PS:我不确定问题是否太长,我认为最好将所有内容放在上下文中.此外,我一直在做大量的研究,但我在swift中找不到任何使用UITabBarController的资源.
解决方法
保持拆分视图布局与细节segues并为以下方法返回true并删除其余代码以使用变量collapseDetailViewController.
func splitViewController(splitViewController: UISplitViewController,ontoPrimaryViewController primaryViewController: UIViewController) -> Bool { return true }
将以下内容放入Master View控制器中
self.splitViewController!.delegate = self; self.splitViewController!.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible self.extendedLayoutIncludesOpaqueBars = true
将self.extendedLayoutIncludesOpaqueBars = true添加到您的详细视图控制器,如上一个答案所述.这应该删除视图控制器上出现的栏.
此外,如果您想要一些额外的功能,如果您希望您的详细视图在iPad上使用全屏,请添加以下内容.
navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem() navigationItem.leftItemsSupplementBackButton = true