新しい Objective-C クラス (UINavigationController のサブクラス) を追加し、次のコードを .m ファイルに追加します。
-(NSUInteger)supportedInterfaceOrientations
{
NSLog(@"supportedInterfaceOrientations = %d ", [self.topViewController supportedInterfaceOrientations]);
return [self.topViewController supportedInterfaceOrientations];
}
-(BOOL)shouldAutorotate
{
return self.topViewController.shouldAutorotate;
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// You do not need this method if you are not supporting earlier iOS Versions
return [self.topViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}
新しいクラスを追加したら、ViewController クラスに移動し、次の変更を加えます。
- (BOOL)shouldAutorotate // iOS 6 autorotation fix
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations // iOS 6 autorotation fix
{
return UIInterfaceOrientationMaskAll;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation // iOS 6 autorotation fix
{
return UIInterfaceOrientationPortrait;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
return YES;
}
shouldAutorotate で、 shouldAutorotateToInterfaceOrientation: ViewController が複数の向きをサポートするようにする場合は YES を返します。それ以外の場合は NO を返します。また、houldAutorotateToInterfaceOrientation: メソッドでも、その特定の ViewController に必要な Orintation を渡します。すべての View Controller に対して同じことを繰り返します。
これを行う理由:-
1: 任意の viewController の preferredInterfaceOrientationForPresentation: を特定の向きに変更できますが、UINavigationController を使用しているため、UINavigationController の supportedInterfaceOrientations もオーバーライドする必要があります。
2: UINavigationController の supportedInterfaceOrientations をオーバーライドするために、UINavigationController をサブクラス化し、UINavigation Orientation に関連するメソッドを変更しました。
それがあなたを助けることを願っています!