DetailViewController
のビューをMasterViewController
で覆い隠さないように、DetailViewController
のフレームをsplitViewController?.displayMode == .PrimaryOverlay
に変更したいとします。私はこれを、jrcの答えであるChange the width of Master in UISplitViewController(以下を参照)に記載されているように、viewDidLayoutSubviews
メソッドをオーバーライドしたカスタムUISplitViewControllerを使用して、splitViewController?.displayMode == .PrimaryHidden
からsplitViewController?.displayMode == .PrimaryOverlay
にiPad縦向きでナビゲートすることができました。私は、ストーリーボードのUISplitViewControllerをSplitViewController
にリンクしています。viewDidLayoutSubviews()
は、iPadで最初のアプリケーションの読み込み時に呼び出されます。UISplitViewControllerのサブクラス内のDetailViewControllerのフレームを更新します。
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
私はMasterViewController.swift
splitViewController?.viewDidLayoutSubviews()
で項目を選択すると、今と呼ばれている
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
collapseDetailViewController = false
splitViewController?.viewDidLayoutSubviews()
}
を、 DetailViewControllerのview.frame.origin.x
とview.frame.width
の最後にviewDidLayoutSubviews()
の部分を印刷すると、私は奇妙な読みをします。そして、作成されたようなフレームへのこれらの変更があっても、DetailViewController
のビューは依然として不明瞭です。
MasterViewController
で新しいアイテムを選択しても、それが決して不明瞭にならないように、DetailViewController
フレームを修正する方法についての助けがありがとう。私はこれを解決するためにUISplitViewController
デリゲートメソッドを実装しておらず、の末尾にloadView
とSplitViewController
を再ロードしようとしましたが、これによりiPad画面がフリーズしました。