更新2
在我的UITabBarController子类中,我尝试添加了以下内容:
-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
}
现在,每当我选择一个选项卡时,设备都会完美地旋转到纵向模式。但是,现在我可以在选择(a)时旋转设备,并且设备将旋转到横向模式。如何停止设备旋转?
我认为我的选项卡控制器子类中的此方法是导致此问题的原因:
- (BOOL)shouldAutorotate {
if(self.selectedIndex == 0)
{
return NO;
}
return [self.viewControllers.lastObject shouldAutorotate];
}
如果我返回“NO”,当我在视图控制器中时,我无法旋转,但当我选择它时,它不会自动旋转到纵向。如果我返回“YES”,当我在视图控制器中时,我可以旋转,但当我选择它时,它会自动旋转到纵向。
我的应用程序中有一个自定义选项卡栏控制器,其层次结构如下:
UITabBarController
|
UINavigationController
| |
| UIViewController(a)
|
UINavigationController
| |
| UIViewController(b)
|
UINavigationController
|
UIViewController(c)
我希望View Controller(a)只能在竖屏模式下查看,而View Controller(b)和(c)可以在所有方向上查看,但不能倒置。现在,我可以单独为每个视图控制器执行此操作,但当我在横向模式下处于(b)中,并选择(a)的选项卡项时,(a)将以横向模式显示,这看起来不好。如何确保选项卡栏(或视图控制器)检查所选视图控制器是否可以在当前方向下查看?
如果需要,这是仅限于竖屏模式的(a)代码:
- (BOOL) shouldAutorotate
{
return NO;
}
- (NSUInteger) supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
更新
我已经将这个添加到视图控制器(a)中,但是我的视图中央出现了一个黑色的正方形,并且导航栏中的标题不再居中。
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
}
viewWillAppear:
方法中使用[UIApplication setStatusBarOrientation:animated:]
来强制设置特定的方向。 - pronebird