如何在Swift中使用UISplitViewController

A.R*_*Roe 8 uitabbarcontroller ipad uisplitviewcontroller ios 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
}
Run Code Online (Sandbox Code Playgroud)

我也有一个UISplitViewController扩展并执行以下操作;

extension UISplitViewController: UISplitViewControllerDelegate {

public override func viewDidLoad() {
    self.extendedLayoutIncludesOpaqueBars = true
}  

}
Run Code Online (Sandbox Code Playgroud)

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

  • 当点击tableviewcell以显示细节视图时,在横向iPad上横向而不是右侧时,主视图左侧窗格中将打开详细视图.我也无法弄清楚如何在iPad或iPhone上使用Portrait时将主视图显示为第一个视图.这两个问题可能有关,也可能没有关系我不确定.

    在此输入图像描述

  • 在移动设备上,标签栏上方有一个底栏,我无法弄清楚如何删除.我在iPad上遇到了同样的问题,直到我在UISplitViewController扩展中添加了代码,viewDidLoad但这并没有影响移动设备.看这里,

在此输入图像描述

PS:我不确定问题是否太长,我认为最好将所有内容放在上下文中.此外,我一直在做大量的研究,但我在swift中找不到任何使用UITabBarController的资源.

我确实按照以下教程http://nshipster.com/uisplitviewcontroller/

Ril*_*Dev 2

您已经很接近了,只需执行以下操作即可。

保留带有详细 Segues 的分割视图布局,并为以下方法返回 true ,并删除与变量有关的其余代码collapseDetailViewController

func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {
return true    
}
Run Code Online (Sandbox Code Playgroud)

将以下内容放入主视图控制器中

self.splitViewController!.delegate = self;

self.splitViewController!.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible

self.extendedLayoutIncludesOpaqueBars = true  
Run Code Online (Sandbox Code Playgroud)

添加self.extendedLayoutIncludesOpaqueBars = true到您的详细视图控制器,如前面的答案所述。这应该会删除视图控制器上出现的栏。

另外,如果您想要一些额外的功能,如果您希望详细视图在 iPad 上使用全屏,请添加以下内容。

navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem()
navigationItem.leftItemsSupplementBackButton = true
Run Code Online (Sandbox Code Playgroud)