|
再在工程设置app只支持竖屏,问题来了,但是发现现在某个页面需要支持横屏,该如何解决呢? 下面方法好像无效 http://zhidao.baidu.com/link?url=3Vr-KHawAvl–hx1MFkRqxm_BzDnqgpfKoEyZVUcv2-WlD-89ONPCLR-KSTU1yx6Ux-tvashEzGOlE8meQdfqNuigJdOqcRVdie-n2yMRg7 |
|
![]() 100分 |
我给你回详细一点吧。
假设目前工程结构是这样的:有一个TabBarController,TabBarController中的每一个Tab都是一个NavigationController,而NavigationController进入到第三级的时候是一个DetailVC(假设是一个需要支持视频播放的Controller),只有DetailVC要支持横、竖屏,它的父VC们都不能支持横屏,这种情况下,如果你有一个所有VC的基类的话,需要添加:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
只支持竖屏,这是作为所有VC的默认实现。 在TabBarController里添加:
- (BOOL)shouldAutorotate {
UINavigationController *navController = (UINavigationController *)self.contentViewController;
if ([navController isKindOfClass:[UITabBarController class]]) {
navController = (UINavigationController *)((UITabBarController *)navController).selectedViewController;
}
return [navController shouldAutorotate];
}
- (NSUInteger)supportedInterfaceOrientations {
UINavigationController *navController = (UINavigationController *)self.contentViewController;
if ([navController isKindOfClass:[UITabBarController class]]) {
navController = (UINavigationController *)((UITabBarController *)navController).selectedViewController;
}
return [navController supportedInterfaceOrientations];
}
TabBarController不知道哪个子VC要横屏,所以只能“问”它们,如果TabBarController不支持横屏的话,它的子VC也支持不了。 进入NavigationController(你可以用类别),添加:
- (BOOL)shouldAutorotate {
return [[self.viewControllers lastObject] shouldAutorotate];
}
- (NSUInteger)supportedInterfaceOrientations {
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
同上,NavigationController也不知道哪个子VC要横屏,也只能问。 进入DetailVC:
- (IBAction)toggleLandscape {
if (self.view.width < self.view.height) {
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationLandscapeRight] forKey:@"orientation"];
} else {
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationPortrait] forKey:@"orientation"];
}
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeRight;
}
- (BOOL)shouldAutorotate {
return YES;
}
横竖屏都要支持,并且能够通过toggleLandscape在横竖屏下切换,这种方法在强制竖屏的时候(触发toggleLandscape)仍然有效。 |
![]() |
我有时间的话可以出个demo
|
![]() |
还有一个问题就是,说一开始在要某个基类中限制只支持竖屏,这和我在 工程的Deployment info 中将device orientation中的landscape 去掉,道理是一样的吗 |
![]() |
不一样,工程的device orientation是方向的总开关,如果没有landscape,是不支持真正的横屏的
|
![]() |
学习了学习了
|

