如何在 Swift 中使用 UISplitViewController

How to use a UISplitViewController in Swift

所以我将 UISplitViewController 添加到一个嵌入了 UITabBarController 的项目中。

UISplitViewController 与他们自己的根控制器有一个 UINavigationController 作为主从关系。

大师 UINavigationController rootController 有一个细节转至细节 UINavigationController

看这里:

一切都很简单吧?现在在 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
}  

}

完成所有这些后,我遇到了以下问题;

PS:不知道是不是问题太长了,我觉得最好结合上下文。我也做了很多研究,但我在 swift 中找不到任何使用 UITabBarController 的资源。

我确实遵循了以下教程http://nshipster.com/uisplitviewcontroller/

splitViewController的master是否可见,需要在splitViewController的ViewDidLoad中添加。否则主视图控制器作为侧边菜单出现,您可以在纵向模式下拖动它

self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;

但是,此主要细节视图仅在 iphone 6 plus 和 ipad 中可见,否则,它将像导航控制器一样工作。至于将 viewController 推送到导航控制器,您正试图将导航控制器推送到另一个导航控制器。我认为不推荐。只需将 segue 从第一个视图控制器(您输入文本的地方)移动到第二个视图控制器(颜色视图控制器),而不是第二个导航控制器。如果您有兴趣在 ipad 和 iphone6 的右侧部分显示详细信息,并作为其他设备的新页面,您不应该使用这种方式,删除 push segue 并使用委托传递数据更改和刷新的信息 UI.

此外,我认为您可能不需要 navigationController 作为详细信息页面,如果您对从详细信息页面进一步导航不感兴趣,那么颜色 viewController 可能就足够了。

有关 iphone 和 iPad 中拆分视图控制器行为的详细信息,只需查看 https://www.raywenderlich.com/94443/uisplitviewcontroller-tutorial-getting-started

尝试将 self.extendedLayoutIncludesOpaqueBars = true 添加到您的 navigationController 的 viewDidLoad 以解决间隙问题

您非常接近,只需执行以下操作。

保持拆分视图布局与细节 segues 和 return true 为以下方法并删除其余代码与变量 collapseDetailViewController.

func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, 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