0

分割ビューを有効にしたいアプリがあります。UI は、iPhone と iPad でわずかに異なります (コンパクトと通常の幅)。

コンパクト幅モードでは、ユーザーが選択できる項目のリストを含む UITableView を用意し、選択したときに新しいビュー コントローラーをナビゲーション スタックにプッシュします。ただし、通常の幅では、UITableView リストが左側に表示され、右側に他のビューが表示されます (UISplitViewController には実装されていません)。したがって、これらの 2 つの異なる画面を 2 つの異なる ViewController クラスに実装しました。

ユーザーが通常の幅の iPad を使用していて、アプリで分割ビューに入り、アプリがコンパクトな幅に変更される場合、ユーザーに表示する ViewController を変更する必要があります。これに最適な戦略は何ですか?

注: ストーリーボードは使用していません。

ありがとう!

4

2 に答える 2

0

回答ありがとうございます。状態の復元を使用することになっているのではないかと考えていましたが、その後、特性コレクションに応じて別のビュー コントローラーを復元しました。

代わりに、ビュー コントローラー コンテナーを作成してから、willLayoutSubviews で、現在のビューの特性コレクションに応じて表示するビュー コントローラーを決定します。

ありがとう!

于 2015-12-04T22:54:40.027 に答える
0

これには2つの解決策があります。1 つ目は、UISplitViewControllerDelegate、具体的にはインターフェイスの折りたたみと展開に関するセクションです。

もう 1 つの解決策は、iPhone と iPad で表示が同じになるようにサイズ コレクションをオーバーライドすることです。2 つのビューは常に「存在」します。Split View ControllerpreferredDisplayModeを Overlay に設定すると、iPhone で見栄えがよくなります。あなたがする必要があるのは、追加するだけです

UITraitCollection* horizTrait = [UITraitCollection
                                 traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
UITraitCollection* vertTrait = [UITraitCollection
                                traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassRegular];
UITraitCollection* childTraits = [UITraitCollection
                                  traitCollectionWithTraitsFromCollections:@[horizTrait, vertTrait]];

[self setOverrideTraitCollection:childTraits forChildViewController:self.childViewControllers[0]];

あなたの親クラスにUISplitViewController(親クラスがない場合は、作成する必要があります。これは単純なナビゲーションコントローラーにすることができます)

編集: 上記のコードは、デバイスの特性をすべてのデバイスに対して正規-正規に設定するだけであることに言及する必要があります。

于 2015-12-04T21:06:13.390 に答える