簡體   English   中英

更新UISplitViewController子類中的DetailViewController框架

[英]Update frame of DetailViewController in subclass of UISplitViewController

我希望在splitViewController?.displayMode == .PrimaryOverlay時更改DetailViewController的框架,以使DetailViewController視圖不會被MasterViewController遮蓋。 在iPad縱向方向上,使用自定義UISplitViewController和重寫的viewDidLayoutSubviews方法(如jrc的答案所述),從iPad縱向方向導航到splitViewController?.displayMode == .PrimaryHiddensplitViewController?.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.xview.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM