我希望在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.x
和view.frame.width
时获得奇怪的读数。结束viewDidLayoutSubviews()
。即使对框架进行了这些更改,DetailViewController
视图仍然模糊不清。
如果有一些关于如何修复DetailViewController
框架的帮助,即使在MasterViewController
中选择新项目时也不会模糊,我们将不胜感激。我没有运气实现任何UISplitViewController
委托方法来解决这个问题,我也尝试在SplitViewController
结束时使用loadView
重新加载didSelectRowAtIndexPath
,但这会导致冻结iPad屏幕。
答案 0 :(得分:2)
对于其他任何想要了解如何让主控和详细视图控制器在进入iPad时无需叠加而并排的人,这真的很容易!只需添加preferredDisplayMode = .AllVisible
即可。无需使用自定义SplitViewControllers(如MGSplitViewController
)或更改拆分视图控制器的框架。 : - )