質問: ### 正常に動作していた回転抑制ができなくなった “Container View” を使ってから、overrideしていたsupportedInterfaceOrientationsが 呼ばれなくなりました。 通常は全方向回転可能。ただし、特定のコントローラーのViewが表示されていたら回転させないようにしていました。 発生している問題(デバイスにより挙動の違いあり) ------------------------ **iPhone 6s、iPad第四世代では問題なく希望通りの動作を確認できました。ところが、iPad mini 3で試したところ回転の制御が全くできません。**supportedInterfaceOrientations、shouldAutorotateがただの一度も呼ばれないのです。 シミュレータでもiPadは全滅です。 ### クラスの階層 1. アプリ全体を制御する一つの親UIViewControllerのサブクラスがあります。(AppRootViewControllerとする) 2. 他に生成するUIViewControllerは全てAppRootViewControllerの子のコンローラーして扱っています。 3. このアプリ内で使われるUIViewControllerは全て共通の親クラスを継承しています。(MyViewControllerとする) 4. そのMyViewControllerでsupportedInterfaceOrientationsなど回転系の制御が書かれています。 5. Storyboard上ではあらかじめ、子のUIViewControllerがContainerViewを使って設定されています。(オンザフライでさらにこの子がインスタンス化されてアプリの中に増えていく) 6. UINavigationController、UITabControllerはどこにも使っていない。 今回はコードを提示しませんでした。iPhoneでは正常に動作するし、iPadでも一部のデバイスで動くので、何が怪しいのか私には判断できなかったからです。もし、問題が発生していそうな場所に心当たりがある方がいらっしゃるなら、どんな処理を書いている部分のコードが必要なのか教えてください。追加記述します。 不具合に気付く前の大きな作業 -------------- 今回悩んでいる問題が発生する以前は、子として扱っているUIViewControllerがアプリのRootViewControllerとして組まれていました。しかしそのインスタンスを複数扱いたくなったため、新たにAppRootViewControllerを用意し、今までRootだったControllerを子にするように変更しました。 この作業をする以前は問題ありませんでした。ModalViewを表示している間の回転抑制はできていました。 所感 -- ひょっとすると私はUIKitの基礎の基礎を理解していないのか?と落ち込み、質問することを避けていましたが、一週間悩み続けてギブアップしてしまいまいした。 よろしくお願いいたします。 開発環境と実機テストのOSバージョンを追記 --------------------- * iOS 10.3.2(実機デバイスは全て ) * Xcode : 8.3.3
回答: はっきりとした回答ではないのですが、 画面回転系の振る舞いに影響ありそうなOSの機能で、iPad で動作する iOS9で追加された Split View があります。 これが、iPad mini 4 未満では対応しておらず、怪しいかもしれないと思いました。 下記Stackoverflow の記事で、iOS9になってから回転制御ができなくなった不具合の回答として、 アプリケーションの General パネルから指定できる `Requires full screen` を有効にする方法が挙げられています。 objective c - iOS 9 supportedInterfaceOrientations not working - Stack Overflow ただSplit view機能が悪影響しているのであれば、不具合が起きるのはmini 4以降と逆になるはずなので 見当違いのことを言っているかもしれません。 確認なのですが “Container View”を使う変更の前は、iPad mini 3でも正しく動作していたのでしょうか?