在只有一个突片支撑旋转两个iOS 5及6(Support rotation in only one

2019-10-28 11:03发布

我的应用程序有两个选项卡的记分员。 标签一个就是记分实际发生,并塔布·特沃包含了过去比赛的历史。 只有标签一个支持旋转,当旋转它隐藏其导航和标签栏(没有足够的垂直空间)。 我不想支持旋转,在所有的历史选项卡上,因为使用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

Answer 1:

好了,三天后我终于解决了这个。 我用Mugunth库马尔的伟大UIKit的类别来呈现一个动作片。 显然UIActionSheet不喜欢有一个代表组不是一个UIViewController。 (或者甚至最上面的视图控制器。我不知道。)切换回标准UIActionSheet showFromTabBar固定这个问题。



文章来源: Support rotation in only one tab on both iOS 5 and 6