我有一个应用程序,我有一个UINavigationController
子类作为我的rootViewController
。我有一个UITableViewController
让用户编辑一些设置,它应该始终处于纵向模式。将MoviePlayer组件推送到导航控制器后,我的应用程序还需要支持所有其他方向。
UITableViewController
子类具有supportedInterfaceOrientations的实现:
- (NSUInteger)supportedInterfaceOrientations {
LLog();
return UIInterfaceOrientationMaskPortrait;
}
logging命令告诉我实际调用它。
问题是没有遵守返回值,即当我转动设备时屏幕变为横向。
如何使设置视图始终以纵向显示,但允许更改视频查看器的方向?
更多信息:我的UINavigationController
子类不会覆盖shouldAutorotate或supportedInterfaceOrientations。我还没有实现
- (NSUInteger)application:(UIApplication *)application
supportedInterfaceOrientationsForWindow:(UIWindow *)window
AppDelegate 中的方法,我已在目标摘要中启用了所有方向。
答案 0 :(得分:17)
我遇到的问题是导航堆栈中的某些ViewControllers
支持所有方向,有些只是纵向,但UINavigation
控制器正在返回所有应用程序支持的方向,这个小黑客帮助了我。
@implementation UINavigationController (iOS6OrientationFix)
-(NSUInteger) supportedInterfaceOrientations {
return [self.topViewController supportedInterfaceOrientations];
}
@end
答案 1 :(得分:2)
您还需要添加:
- (BOOL)shouldAutorotate {
return NO;
}
并将应用程序plist文件中 root 视图控制器支持的旋转设置为仅portrait
。
答案 2 :(得分:2)
UINavigationController
的类别不适合我。我不知道为什么。我用UIViewController
这样的类别解决了我的问题:
@implementation UIViewController (Orientation)
- (BOOL) shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
NSUInteger orientations = UIInterfaceOrientationMaskPortrait;
if ([self isKindOfClass:[PlayerViewController class]])
{
orientations |= UIInterfaceOrientationMaskLandscapeLeft;
orientations |= UIInterfaceOrientationMaskLandscapeRight;
}
return orientations;
}
@end