###正常に動作していた回転抑制ができなくなった
“Container View” を使ってから、overrideしていたsupportedInterfaceOrientationsが 呼ばれなくなりました。
通常は全方向回転可能。ただし、特定のコントローラーのViewが表示されていたら回転させないようにしていました。
##発生している問題(デバイスにより挙動の違いあり)
**iPhone 6s、iPad第四世代では問題なく希望通りの動作を確認できました。ところが、iPad mini 3で試したところ回転の制御が全くできません。**supportedInterfaceOrientations、shouldAutorotateがただの一度も呼ばれないのです。
シミュレータでもiPadは全滅です。
###クラスの階層
- アプリ全体を制御する一つの親UIViewControllerのサブクラスがあります。(AppRootViewControllerとする)
- 他に生成するUIViewControllerは全てAppRootViewControllerの子のコンローラーして扱っています。
- このアプリ内で使われるUIViewControllerは全て共通の親クラスを継承しています。(MyViewControllerとする)
- そのMyViewControllerでsupportedInterfaceOrientationsなど回転系の制御が書かれています。
- Storyboard上ではあらかじめ、子のUIViewControllerがContainerViewを使って設定されています。(オンザフライでさらにこの子がインスタンス化されてアプリの中に増えていく)
- UINavigationController、UITabControllerはどこにも使っていない。
今回はコードを提示しませんでした。iPhoneでは正常に動作するし、iPadでも一部のデバイスで動くので、何が怪しいのか私には判断できなかったからです。もし、問題が発生していそうな場所に心当たりがある方がいらっしゃるなら、どんな処理を書いている部分のコードが必要なのか教えてください。追加記述します。
##不具合に気付く前の大きな作業
今回悩んでいる問題が発生する以前は、子として扱っているUIViewControllerがアプリのRootViewControllerとして組まれていました。しかしそのインスタンスを複数扱いたくなったため、新たにAppRootViewControllerを用意し、今までRootだったControllerを子にするように変更しました。
この作業をする以前は問題ありませんでした。ModalViewを表示している間の回転抑制はできていました。
##所感
ひょっとすると私はUIKitの基礎の基礎を理解していないのか?と落ち込み、質問することを避けていましたが、一週間悩み続けてギブアップしてしまいまいした。
よろしくお願いいたします。
##開発環境と実機テストのOSバージョンを追記
- iOS 10.3.2(実機デバイスは全て )
- Xcode : 8.3.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/06/23 00:39
退会済みユーザー
2017/06/23 01:04
2017/06/23 07:08 編集