打开 UISplitViewController 到主视图而不是详细视图

2024-01-19

我有一个带有目标 iPhone 6 应用程序的分割视图界面。首次启动应用程序时,它会打开详细信息视图;我希望它能向主视图打开。我努力了:

self.splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.PrimaryOverlay

这是其他地方建议的(之前的 StackOverFlow 问题) https://stackoverflow.com/questions/27849654/uisplitviewcontroller-display-master-view-above-detail-in-portrait-orientation但它似乎没有做任何事情,并且在启动时不会打开主视图。我还尝试将以下行添加到我的 AppDelegate 中:

splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:

但无论返回 true 或 false (另一个先前的堆栈溢出问题 https://stackoverflow.com/questions/25875618/uisplitviewcontroller-in-portrait-on-iphone-shows-detail-vc-instead-of-master)我没有成功。

我确实在 Xcode 中启动了示例 Master-Detail 应用程序,它基于 splitViewController: 调用返回 false; 加载到主视图。但是,我不确定如何在更复杂的布局中使其工作。


Swift

UISplitViewController 在纵向细节上方显示主视图 https://stackoverflow.com/questions/27849654/uisplitviewcontroller-display-master-view-above-detail-in-portrait-orientation不是显示主视图,而是在主视图下方以全角显示详细视图。

iPhone 上的纵向 UISplitViewController 显示细节 VC 而不是主视图 https://stackoverflow.com/questions/25875618/uisplitviewcontroller-in-portrait-on-iphone-shows-detail-vc-instead-of-master是关于崩溃机制的原理。

目前的答案涉及:

  • Master → Detail (Compact width)
    • iPhone 4s、5、5s、SE、6、6s、7(任何方向)
    • iPod触摸
    • 任何 iPhone Plus(纵向)
  • side-by-side (all other sizes)
    • iPad
    • 任何 iPhone Plus(横向)

您必须设置preferredDisplayMode。你想要的是.primaryVisible如果它存在的话!使用.allVisible, iOS精选Detail如果只有 1 个视图适合(紧凑宽度);在这个尺寸下,下面的代码将选择Master.

秘诀就是改变both the preferredDisplayMode to .allVisible and回来true in collapseSecondary:onto.

class PrimarySplitViewController: UISplitViewController,
                                  UISplitViewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
        self.preferredDisplayMode = .allVisible
    }

    func splitViewController(
             _ splitViewController: UISplitViewController,
             collapseSecondary secondaryViewController: UIViewController,
             onto primaryViewController: UIViewController) -> Bool {
        // Return true to prevent UIKit from applying its default behavior
        return true 
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打开 UISplitViewController 到主视图而不是详细视图 的相关文章

随机推荐