为什么我不能在第一次运行时在UISplitViewController中将Master和Detail视图彼此相邻放置,但是在轮换时它可以工作?

Asy*_*nc- 10 ipad uisplitviewcontroller ios swift swift2

我有一个拆分视图控制器,左侧有一个项目列表,右侧有一个详细视图.AppDelegate中的相关代码:

let splitViewController = mainView.instantiateViewControllerWithIdentifier("initial") as! UISplitViewController



        let rightNavController = splitViewController.viewControllers.last as! UINavigationController
        let detailViewController = rightNavController.topViewController as! DetailsIpad

        let leftNavController = splitViewController.viewControllers.first as! UINavigationController
        let masterViewController = leftNavController.topViewController as! MainViewController

        masterSplitViewController = masterViewController
        detailSplitViewController = detailViewController

        // Override point for customization after application launch.
        let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController
        navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem()
        splitViewController.delegate = self

        self.window!.rootViewController = splitViewController
Run Code Online (Sandbox Code Playgroud)

当我第一次启动应用程序时,我发现拆分屏幕的右侧部分占用了所有屏幕:

在此输入图像描述

如果我旋转屏幕,它会被正确设置(可能因为两个视图都出现在屏幕上):

在此输入图像描述

当我在任何地方设置断点时,我看到右侧的详细视图在左侧的主视图(项目列表)之前加载,尽管没有直接调用.我无法更改分屏的视图的调用顺序.我怎样才能解决这个问题?

更新:

我可以在显示拆分视图控制器之前设置它:

splitViewController.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible
Run Code Online (Sandbox Code Playgroud)

在我打印时,在分割控制器的ViewDidLoad中:

print(self.preferredDisplayMode.rawValue)
Run Code Online (Sandbox Code Playgroud)

我得到:2,这是AllVisible.但结果仍然相同.

Asy*_*nc- 0

感谢@Tarun Tyagi 的解释,但就我而言,建议的操作不起作用。然而,这对我有用:在 SplitViewController 中我添加了对 setNeedsLayout() 的调用:

override func viewDidAppear(animated: Bool) {
    self.view.setNeedsLayout()
}
Run Code Online (Sandbox Code Playgroud)

当视图已经在屏幕上时,这将使视图刷新。