ios - UISplitViewController iPad 行为

标签 ios iphone swift ipad uisplitviewcontroller

我正在制作我的第一个通用应用程序,到目前为止还不错,但我在 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)
}

你可能需要知道的其他代码,我在主视图 Controller 的 viewDidLoad 中添加了这些代码

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

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

所以如果有人能帮我找到解决这个问题的方法,我将非常感激

最佳答案

UISplitViewController 使用大小类来确定如何显示他的主视图 Controller 和详细 View Controller 。

当您的 UISplitViewController 具有 horizo​​ntalSizeClass 和 verticalSizeClass Regular 时,它将在同一屏幕上同时显示主视图 Controller 和详细 View Controller 。

您需要将 Split View Controller 嵌入到容器 View Controller 中以覆盖默认大小类 I explained here .

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

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)
    }
}
}

关于ios - UISplitViewController iPad 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35728938/

相关文章:

ios - 查询 Firebase 以获取嵌套子 swift

swift 属性空 setter 和 getter

ios - 在 UITableViewCell 中设置 UIRectCorner 的位置

iphone - 如何(以编程方式)判断是否有/没有任何支持打开特定文档类型的注册应用程序?

iphone - 如何在 UISearchBar 变为事件状态时展开它

ios - 在 map 引脚 Xcode 中使用图像

ios - 原生 iOS 国家/地区选择器

ios - Google map 从用户位置开始

iphone - ASIHTTPRequest : Adding Header which should send with every request

ios - 如何使用 iOS 中的视觉控件在 ios 中选择音轨的一部分?