6

セカンダリ (詳細) VC が UICollectionViewController である UISplitViewController があります。コレクション ビューのサイズとアスペクトの変更に基づいて、コレクションのセルのサイズを変更したいと考えています。UIContentContainer プロトコル メソッドをオーバーライドして、このサイズ変更をトリガーします。

// MARK: - UIContentContainer protocol methods

override
func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)
{
    setFlowLayoutItemSizeForViewSize(size)
    collectionViewLayout.invalidateLayout()
}

これは呼び出され、デバイスが回転するときに希望どおりに機能します。ただし、このメソッドは、splitViewController?.displayModeButtonItem() によって提供されるボタンを押して、プライマリ (マスター) ビュー コントローラーを表示または折りたたむときに呼び出されません。その折りたたみは必然的にセカンダリ (詳細) ビューのサイズを変更するため、トリガーされたときに viewWillTransitionToSize... メソッドを呼び出す必要があります。

だから、2つの質問:

1) displayModeButtonItem が押されたときに実際に viewWillTransitionToSize... メソッドを呼び出す必要がありますか? もしそうなら、私はバグを見つけたようです。

2)私が見ているものが実際に正しい動作である場合、displayModeButtonItemが押されたとき、またはそのボタンの結果としてそのサイズが変更されたときに、セカンダリ(詳細)コントローラーが「知る」方法を誰かが提案できますか?押される?

ありがとう!

カール

4

3 に答える 3

6

1) バグではありません。displayModeChange が sizeTransition として扱われていない

2) UISplitviewController には、オプションを実装できる UISplitViewControllerDelegate が既にある可能性が最も高いです。

splitViewController(_ svc: UISplitViewController,
      willChangeToDisplayMode displayMode: UISplitViewControllerDisplayMode)

splitView がどのモードに切り替わるかに応じて、UISplitViewControllerDisplayModePrimaryHiddenまたはそれに応じて呼び出されるメソッド。UISplitViewControllerDisplayModeAllVisible

于 2015-10-16T16:18:23.427 に答える
0

この問題を解決する方法は、次のようにサブクラス化しUISplitViewController、オーバーライドすることでしたviewWillTransitionToSize(...)

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)

    //Get the master controller
    guard let masterController = viewControllers[0] as? UIViewController else {
        return print("master controller not of type UINavigationController")
    }

    //Notify masterController that the view will transition
    masterController.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
}

それが役に立てば幸い!

于 2016-07-27T15:13:03.707 に答える