3

を使用して iPad アプリを設計していUISplitViewControllerます。UISplitViewControllerマスター ビュー コントローラー (つまり、左側の薄いビュー) が を介して常に表示されるように構成しsplitViewController.preferredDisplayMode = .AllVisibleました。

詳細ビューコントローラーはUICollectionView、iPadが縦向きか横向きかによって表示方法を変えたいと思っています。縦向きの場合は、コレクション ビューに 1 つの列のみを表示します (に似ていますUITableView)。横向きの場合は、より多くの水平方向の画面領域を使用できるため、複数の列を表示します。そのコレクション ビューのデータ ソースとデリゲートを実装するクラス内のいくつかの条件を使用して、これを実行できると考えました。

アプリがiPhoneなどでも動作するようにサイズクラスと特性を使用したいので(同じ特性が発生した場合)、デバイスの向きを確認したくありません。

各View Controllerにプロパティがあることは知っていtraitCollectionますが、メソッドでこのプロパティを印刷すると、iPadの最初の向きに関係なく、viewDidAppear常にView Controllerが_UITraitNameHorizontalSizeClass = Compact, _UITraitNameVerticalSizeClass = Regular.

iPadが縦向きの場合はこれが予想されますが、最初は横向きの場合でもこれが印刷されます-ただし、その向きは水平および垂直サイズのクラスであるRegularと予想されます.Regular

さらに、View Controller にメソッドを実装するtraitCollectionDidChange:と、回転時に呼び出されたり、詳細 View Controller の展開ボタンがタップされてマスター View Controller が非表示になったりしても呼び出されません (詳細 View Controller をフルスクリーンにします)。

それで、私の質問は、分割ビューコントローラー内のビューコントローラーのサイズクラス/特性の変更をどのように検出できるかです...または、これは完全に間違っていますか?

応答のサンプル コードの目的のために、アプリは iOS 9 を対象とする Swift で記述されています。

助けてくれてありがとう!

4

1 に答える 1

0

次の方法traitCollectionを使用して確認してみてください。self.splitViewController

private var isCompactOrientation: Bool {
    get {
        return self.splitViewController?.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClass.Compact
    }
}

を使用するself.traitCollection.horizontalSizeClassと、常に が返され.Compactます。

于 2016-06-30T06:54:25.710 に答える