iPhone上的UISplitViewController在iOS 8中始终以横屏模式显示主视图和详细视图

4

UISplitViewController在iPhone的竖屏模式下,在iOS 8中总是同时显示主视图和细节视图。

我尝试通过子类化UISplitViewController并对其进行配置,以便同时显示主视图和细节视图。但是没有任何效果。

class APPSplitViewController: UISplitViewController, UISplitViewControllerDelegate {

    override func viewDidLoad() {

        super.viewDidLoad()
        preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible
        maximumPrimaryColumnWidth = 32.0
        minimumPrimaryColumnWidth = 32.0
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

如何操作?

1个回答

3

UISplitViewController仅在水平正常环境(新的TraitCollection大小)中使用并排显示。

分割视图控制器根据可用空间确定其子视图控制器的排列方式。在水平正常环境中,分割视图控制器尽可能地并排显示其视图控制器。在水平紧凑环境中,分割视图控制器的行为更像是导航控制器,最初显示主视图控制器,并根据需要推送或弹出辅助视图控制器。您还可以通过将值分配给preferredDisplayMode属性来要求分割视图控制器优先使用特定的排列方式。

解决方案。 您必须更改SplitViewController的TraitCollection。如何做到这一点:

  • 创建一个ViewController并将您的SplitViewController作为子项添加。
  • 为您的子项(UISplitViewController)覆盖带有大小.Regular的traitCollection。

ViewController包装器

class TraitOverrideViewController: UIViewController {

 override func viewDidLoad() {
    super.viewDidLoad()
    configureSplitVC()
  }


  private func configureSplitVC() {

    let splitVC = self.childViewControllers[0] as UISplitViewController
    setOverrideTraitCollection(UITraitCollection(horizontalSizeClass: .Regular), forChildViewController: splitVC)
  }
}

在iOS 8中,UISplitViewController使用自适应用户界面和TraitCollections来显示其内容。
它会根据视图的大小和类型显示不同的样式。您可以通过我上面解释的技术进行更改。
您可以在使用UIKit构建自适应应用程序的WWDC视频中获取更多信息。

嗨Konstantin Koval,感谢您的帮助。这是一个很好的答案。我还有一个问题。为什么我失去了详细视图? - CocoaUser
尝试设置 primaryColumnWidth。 - Kostiantyn Koval
或者你可以调用showDetailViewController,以显示默认项目的detailsViewController,例如在索引0处。 - Kostiantyn Koval

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接