在UISplitViewController

时间:2016-06-30 14:05:38

标签: ios swift ipad uisplitviewcontroller

我希望在DetailViewController时更改splitViewController?.displayMode == .PrimaryOverlay的框架,以便DetailViewController永远不会隐藏MasterViewController视图。我已设法在iPad纵向导航时从splitViewController?.displayMode == .PrimaryHidden导航到splitViewController?.displayMode == .PrimaryOverlay,使用自定义的UISplitViewController和覆盖viewDidLayoutSubviews方法,如jrc的回答:{ {3}}(见下文)。我已将故事板中的UISplitViewController链接到SplitViewController,并在使用iPad初始应用程序加载时调用viewDidLayoutSubviews()

SplitViewController.swift

override func viewDidLayoutSubviews() {

        var masterViewController = (self.viewControllers[0] as! UINavigationController).topViewController
        var detailViewController = (self.viewControllers[1] as! UINavigationController).topViewController

        // Adjust the width of the detail view
        var detailViewFrame = detailViewController!.view.frame
        detailViewFrame.origin.x += masterViewController!.view.frame.width
        detailViewFrame.size.width -= masterViewController!.view.frame.width
        detailViewController!.view.frame = detailViewFrame

        detailViewController!.view.setNeedsLayout()
    }

但是,当我在splitViewController?.displayMode == .PrimaryOverlay中,然后从MasterViewController中选择一个不同的项目时,DetailViewController框架将恢复为默认的帧大小和位置。我尝试使用以下方法解决此问题(尽管不建议以这种方式调用viewDidLayoutSubviews()):

MasterViewController.swift

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        collapseDetailViewController = false
        splitViewController?.viewDidLayoutSubviews()
    }

现在,当我选择MasterViewController.swift splitViewController?.viewDidLayoutSubviews()中的某个项目时,我会在打印DetailViewController&{39} view.frame.origin.xview.frame.width时获得奇怪的读数。结束viewDidLayoutSubviews()。即使对框架进行了这些更改,DetailViewController视图仍然模糊不清。

如果有一些关于如何修复DetailViewController框架的帮助,即使在MasterViewController中选择新项目时也不会模糊,我们将不胜感激。我没有运气实现任何UISplitViewController委托方法来解决这个问题,我也尝试在SplitViewController结束时使用loadView重新加载didSelectRowAtIndexPath,但这会导致冻结iPad屏幕。

1 个答案:

答案 0 :(得分:2)

对于其他任何想要了解如何让主控和详细视图控制器在进入iPad时无需叠加而并排的人,这真的很容易!只需添加preferredDisplayMode = .AllVisible即可。无需使用自定义SplitViewControllers(如MGSplitViewController)或更改拆分视图控制器的框架。 : - )