そのため、他の多くのアプリと同様に、縦向きと横向きの両方のインターフェイスの向きをサポートするビューコントローラーが1つまたは2つしかないという問題に遭遇しました。それ以外の場合は、縦向きのみのアプリです。iOS 6より前はすべて正常に機能していましたが、突然自動回転が機能しなくなりました。ここでのいくつかの素晴らしい質問のおかげで、最初のnavControllerがshouldAutorotateに対する個々のtopViewControllerの設定を返すようにすることで、この問題を解決することができました。
- (BOOL)shouldAutorotate
{
return self.topViewController.shouldAutorotate;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
しかし、私は新しい問題に遭遇しました。ルートVC(viewController A)は自動回転せず、ポートレートのみをサポートする必要があります。navスタックのViewControllerBは、縦向きと横向きをサポートしています。私がviewControllerBにいて、横向きにいて、「戻る」をタッチしてビューをviewControllerAにポップバックする場合...vc Aは横向きに読み込まれますが、これはサポートされていないはずであり、縦向きに回転して戻ることはありません。 vcAのshouldAutorotateはNOに設定されています。
これに対処する方法についてのアイデアは大歓迎です。私の最初の考えは、ビューが横向きの場合、最初に強制的に縦向きに回転して戻す手動の方法でvc Bの「戻る」ボタンをオーバーライドすることでした...次に、ビューコントローラーをvcAに戻します...プログラムでローテーションを強制します。何か案は?
vcAのインターフェースメソッドは次のとおりです。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return NO;
}
-(BOOL)shouldAutorotate
{
return NO;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
そしてここに彼らがvcBにあるものがあります:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
-(BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAllButUpsideDown;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}