![](/img/trans.png)
[英]UISplitViewController, reuse DetailViewController (Swift)
[英]Update frame of DetailViewController in subclass of UISplitViewController
我希望在splitViewController?.displayMode == .PrimaryOverlay
时更改DetailViewController
的框架,以使DetailViewController
视图不会被MasterViewController
遮盖。 在iPad纵向方向上,使用自定义UISplitViewController和重写的viewDidLayoutSubviews
方法(如jrc的答案所述),从iPad纵向方向导航到splitViewController?.displayMode == .PrimaryHidden
到splitViewController?.displayMode == .PrimaryOverlay
splitViewController?.displayMode == .PrimaryHidden
时,我已经设法使此工作正常工作:如jrc的答案所述: 更改宽度UISplitViewController中的Master (请参见下文)。 我已经将情节提要中的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()
,但是在viewDidLayoutSubviews()
末尾打印DetailViewController的view.frame.origin.x
和view.frame.width
时,会得到奇怪的读数。 即使对框架进行了这些更改,但似乎仍然看DetailViewController
视图。
如果对如何修复DetailViewController
框架有所帮助,以便即使在MasterViewController
选择新项目也不会使其模糊,将不胜感激。 我还没有实现任何UISplitViewController
委托方法来解决此问题,我还尝试在didSelectRowAtIndexPath
的末尾用loadView
重新加载SplitViewController
,但这导致iPad屏幕冻结。
对于想知道如何使主视图和局部视图控制器在iPad上不重叠的情况下并排显示的人来说,这真的很容易! 只需添加preferredDisplayMode = .AllVisible
。 无需使用自定义的SplitViewControllers(例如MGSplitViewController
或更改Split View Controller的框架。 :-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.