我的应用程序有两个选项卡的记分员。 标签一个就是记分实际发生,并塔布·特沃包含了过去比赛的历史。 只有标签一个支持旋转,当旋转它隐藏其导航和标签栏(没有足够的垂直空间)。 我不想支持旋转,在所有的历史选项卡上,因为使用TabBar隐藏在柜台上。 这是很不和谐切换标签,然后有标签栏消失。
有几种类型的游戏,可以显示在第一标签栏,“CounterBase”的所有子类。 当一个新的游戏开始,在使用TabBar的第一个视图控制器被换出。 所有旋转代码在CounterBase在它的子类来处理,而不是。
我已经试了无数的事情,支持旋转,但他们已经全部片状。 到目前为止,我已经得到了最好的结果是有,当应用程序被加载首次一切正常,但在转速停止第一次一个新的游戏开始(交换的第一个视图控制器)。
有一件事我发现是,在supportedInterfaceOrientationsForWindow应用程序委托的第一个视图控制器被换出后,不再叫。
什么是处理这个问题的最好方法?
更新我忘了我使用iPad上的一个标签栏,因为它总是隐藏。 轮换工作得很好那里,所以现在我加倍困惑。 然而,历史上从来没有标签显示,这可能会或可能不相关。
更新2我还使用自定义导航控制器和执行shouldAutorotate尝试。 仍然没有奏效。
更新3我发现它不更换导致该问题的第一个标签,但呈现在导航控制器presentViewController模态的视图:动画:完成:. 我曾尝试在呈现视图控制器覆盖shouldAutorotate,但不起任何作用。 此外,我已经添加了我使用的UINavigationController以下目录。
这是我目前的执行:
标签栏控制器类
-(BOOL)shouldAutorotate{
if (self.selectedIndex == 0) // First tab is Counter
return YES;
else
return NO;
}
- (NSUInteger)supportedInterfaceOrientations{
if (self.selectedIndex==0) {
return UIInterfaceOrientationMaskAll;
}
else {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
ALog(@"Tab bar selectedIndex: %d", self.selectedIndex);
return self.selectedIndex == 0;
}
CounterBase
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if (UI_USER_INTERFACE_IDIOM_PAD()){
return YES;
} else if (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown){
return YES;
}
return NO;
}
- (NSUInteger)supportedInterfaceOrientations {
if (UI_USER_INTERFACE_IDIOM_PHONE())
return UIInterfaceOrientationMaskAllButUpsideDown;
else
return UIInterfaceOrientationMaskAll;
}
- (BOOL) shouldAutorotate {
return YES;
}
HistoryBase
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
BilliardsBuddyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
return appDelegate.tabBarController.selectedIndex == 0;
}
-(BOOL)shouldAutorotate{
return NO;
}
-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationPortrait;
}
AppDelegate中
- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
ALog(@"Tab bar selectedIndex: %d", tabBarController.selectedIndex);
if (tabBarController.selectedIndex == 0 || UI_USER_INTERFACE_IDIOM_PAD()){
return UIInterfaceOrientationMaskAll;
} else {
return UIInterfaceOrientationMaskPortrait;
}
}
@implementation UINavigationController (autoRotate)
-(BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAll;
}
@end