![](/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.