如何防止标签栏控制器中的视图控制器旋转?

问题描述:

我有一个标签栏控制器管理4个选项卡。我已将子选项卡栏控制器分类,以便shouldAutorotateToInterfaceOrientation:方法仅允许其中一个选项卡中的特定视图控制器进行旋转。一切工作都很好:其余选项卡中的控制器不会旋转。但是,当允许旋转的视图控制器实际旋转时,如果用户点击其中一个选项卡,相应的视图控制器也会出现旋转(即使其shouldAutorotateToInterfaceOrientation方法显式返回NO)。如何防止标签栏控制器中的视图控制器旋转?

如何防止这种情况发生?

要清楚,这里是一个例子。点击标签0,1或2并尝试旋转设备,没有任何反应(正确)。轻敲标签4并旋转设备,旋转(正确)旋转与标签4的视图控制器相关的视图。现在,仍然握住iPhone在旋转的横向方向并点击另一个选项卡(0,1或2)会显示一个旋转的视图(这是不正确的,我试图避免)。

这是一个常见的“错误” - 但是一个很好的解决方法是强制shouldAutorotateToInterfaceOrientation:选择如下被触发:

- (void)viewDidAppear:(BOOL)animated { 
    UIWindow *window = [[UIApplication sharedApplication] keyWindow]; 
    UIView *view = [window.subviews objectAtIndex:0]; 
    [view removeFromSuperview]; 
    [window addSubview:view]; 
}