【发布时间】:2014-11-26 04:53:53
【问题描述】:
更新 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)
我希望视图控制器 (a) 只能在纵向模式下查看,视图控制器 (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"];
}
【问题讨论】:
标签: ios objective-c uiviewcontroller rotation uitabbarcontroller