【问题标题】:UISplitViewController always show master view in iPad portrait mode iOS 9UISplitViewController 总是在 iPad 纵向模式下显示主视图 iOS 9
【发布时间】:2016-05-28 04:24:44
【问题描述】:

我正在使用 UISplitViewController 构建一个通用应用程序,并针对 iOS 9 及更高版本。应用语言为 Objective-C。

从 Xcode Master/Detail 模板开始并以标准方式设置视图后,我意识到如果我始终将主视图保持在屏幕上(在 iPad 上),应用程序会更好,包括何时设备处于纵向模式。但是,无论我多么努力地搜索,我都找不到任何东西来帮助我了解这是如何实现的。我知道这是以前使用 splitViewController:shouldHideViewController:inOrientation:

实现的

但是,这种方法在 iOS 9 中已被弃用,我不知道是什么替代了它以及为什么。我查看了 UISplitViewController 的新委托方法,发现它们完全缺乏直观性。

我非常感谢一些关于替换 splitViewController:shouldHideViewController:inOrientation: 以及如何使用它来保持主视图始终显示在 iPad 上的指针。

【问题讨论】:

    标签: ios objective-c ipad ios9 uisplitviewcontroller


    【解决方案1】:

    子类 UISplitViewController

    无需专门跟踪方向变化:在 iPhone 的纵向模式下,Master 和 Detail 仍将按顺序显示,而大多数 iPhone 在横向模式下。
    preferredDisplayMode:.allVisible 仅影响两个视图的模式 可以同时可见。

    斯威夫特

    class SplitViewController: UISplitViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            preferredDisplayMode = .allVisible
        }
    }
    

    Obj-C

    - (void)viewDidLoad {
        [super viewDidLoad];
        self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;
    
    }
    

    iPad 纵向 & iPhone 8 Plus 横向

    【讨论】:

    • 太棒了,谢谢。会试一试。但是真的有必要为了改变这个值而进行子类化吗?知道为什么无法在原版拆分视图上更改值吗?
    • 现在有机会尝试一下。像梦一样工作。我不敢相信我花了这么多时间尝试研究拆分视图委托,并且没有正确查看拆分视图本身的文档。文档中没有说子类化是必要的,但它似乎是最有效的方法,因为它确保在显示之前配置拆分视图。再次感谢!
    • 不需要子类化:如果你有指向UISplitViewController的指针,你可以aSplitViewController.preferredDisplayMode = .AllVisible。如果文档详尽,就不会有 StackOverflow,我也不会有徽章……
    • 请注意,.AllVisible 已重命名为 .allVisible
    【解决方案2】:

    如果最近有人检查此主题,则 .allVisible 在 IOS 14 中已被弃用,请使用:splitVC.preferredDisplayMode = .oneBesideSecondary

    aSplitViewController.preferredDisplayMode = .oneBesideSecondary

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多