首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UISplitViewController iPad行为

UISplitViewController iPad行为
EN

Stack Overflow用户
提问于 2016-03-01 17:03:27
回答 1查看 1.2K关注 0票数 2

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

当UISplitViewController处于纵向模式时,我如何使它与在iPhone上的行为相同?

就像在纵向模式下只显示主屏幕当我点击它,它导航到详细信息屏幕,当在景观模式显示两者在彼此旁边。

现在发生的情况是,它只在肖像中显示细节屏幕,并以景观模式显示两者。

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

代码语言:javascript
复制
func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {

    return true
}

但是这并不适用于iPad,我在这里找到了另一个代码,但也没有工作。

代码语言:javascript
复制
 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中的这些代码。

代码语言:javascript
复制
    self.splitViewController?.delegate = self
    self.splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.PrimaryOverlay

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-01 23:05:33

UISplitViewController使用size类来确定如何显示主视图和详细视图控制器。

当您的UISplitViewController具有horizontalSizeClass和verticalSizeClass规则时,它将在同一个屏幕上同时显示主视图和详细视图控制器。

您需要将拆分视图控制器嵌入到容器视图控制器中,以覆盖默认大小类I explained here

您还必须检查设备的方向,以分叉之间的紧凑(当肖像)或常规(当景观)水平大小类:

代码语言:javascript
复制
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)
    }
}
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35728938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档