【问题标题】:UISplitViewController iPad behaviourUISplitViewController iPad 行为
【发布时间】:2016-06-14 05:26:32
【问题描述】:

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

如何使 UISplitViewController 在 iPhone 处于纵向模式时的行为与 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

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

【问题讨论】:

    标签: ios iphone swift ipad uisplitviewcontroller


    【解决方案1】:

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

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

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

    您还必须检查设备方向以在 Compact(纵向)或 Regular(横向)水平尺寸类别之间分叉:

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

    【讨论】:

    • 当我从横向开始然后切换到纵向时它工作正常,但是当我直接将 iPad 作为纵向启动时,我仍然可以同时看到主视图和细节视图控制器
    • 你可以尝试在 viewDidLoad() 中调用 performOverrideTraitCollection() 吗?
    • 我面临与主题启动者相同的问题,但与 ahmedHegazi 相反。如果我从横向开始似乎工作正常,但是当我以纵向模式启动应用程序时(无论设备是否在加载容器视图控制器之前旋转),它只显示详细视图控制器,而我希望它启动主视图控制器。这个问题有解决办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    相关资源
    最近更新 更多