繁体   English   中英

UISplitViewController iPad行为

[英]UISplitViewController iPad behaviour

到目前为止,我正在制作我的第一个通用应用程序,但是我在iPad上的UISplitViewController遇到了问题。

在肖像模式下,如何使UISplitViewController与iPhone上的行为相同?

就像在纵向模式下,当我单击它时仅显示主屏幕,它导航到详细信息屏幕,而在横向模式下则将它们彼此并排显示。

现在发生的是,它仅以纵向显示详细信息屏幕,而以横向模式显示这两个屏幕。

对于iPhone,我在主视图中使用了此代码来解决此问题

func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {

    return true
}

但这不适用于iPad,我在这里找到了另一个代码,但也无法正常工作。

 func splitViewController(svc: UISplitViewController, willHideViewController aViewController: UIViewController, withBarButtonItem barButtonItem: UIBarButtonItem, forPopoverController pc: UIPopoverController) {

    self.navigationItem.leftBarButtonItem?.target?.performSelector((self.navigationItem.leftBarButtonItem?.action)!, withObject: self.navigationItem)
}

其他代码也许您需要知道,我在主视图控制器的viewDidLoad中添加了这些代码

    self.splitViewController?.delegate = self
    self.splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.PrimaryOverlay

    self.splitViewController!.maximumPrimaryColumnWidth = splitViewController!.view.bounds.size.width;
    self.splitViewController!.preferredPrimaryColumnWidthFraction = 0.3

因此,如果有人可以帮助我找到此问题的解决方案,请多谢

UISplitViewController使用大小类来确定如何显示其主视图和局部视图控制器。

当您的UISplitViewController具有horizo​​ntalSizeClass和verticalSizeClass Regular时,它将在同一屏幕上同时显示Master和Detail视图控制器。

您需要将您的拆分视图控制器嵌入到容器视图控制器中,以覆盖默认的大小类,如我在此处所述

您还必须检查设备方向以在紧凑(纵向)或常规(横向)水平尺寸类之间进行分叉:

class ContainerVC: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()
}

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    performOverrideTraitCollection()
}

private func performOverrideTraitCollection() {
    let orientation = UIDevice.currentDevice().orientation
    var isPortrait = false
    switch orientation {
    case .Portrait, .PortraitUpsideDown:
        isPortrait = true
    default:
        isPortrait = false
    }
    for childVC in self.childViewControllers {
        self.traitCollection.userInterfaceIdiom
        setOverrideTraitCollection(UITraitCollection(horizontalSizeClass: isPortrait ? .Compact : .Regular), forChildViewController: childVC)
    }
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM