更改选项卡时忽略自动旋转

Posted

技术标签:

【中文标题】更改选项卡时忽略自动旋转【英文标题】:Autorotate ignored when changing tabs 【发布时间】:2011-03-14 16:16:20 【问题描述】:

我有一个带有 UITabBarController 的应用程序,每个选项卡都有一个 UINavigationController “附加”到它。现在让我们假设选项卡 1,2 和 4 中的 rootViewControllers(navigationControllers)仅支持纵向方向,并且具有这样的“shouldAutorotateToInterfaceOrientation”实现,仅在被要求旋转到纵向时才返回 YES。然而,Tab 3 在其 navigationController 中有一些 viewControllers 支持横向。

当我现在在选项卡 3 中并移动到支持横向的视图控制器之一时,我能够转动设备并且界面变为横向。然而,如果我在横向模式下使用界面点击选项卡 1、2 或 4,界面不会变回纵向而是保持横向,尽管显示的 viewController 显然只支持纵向。

我不确定我缺少什么或者这是否是预期的行为,一旦我通过 tabBarController 切换到仅纵向视图控制器,我希望界面方向切换回纵向。整个层次结构都是以编程方式构建的。

谢谢!

【问题讨论】:

【参考方案1】:

在我的一个应用程序中,我遇到了与您相同的问题,不同之处在于我没有在选项卡项中使用导航控制器。

我最终为方法 shouldAutorotate 为 UITabBarController 创建了一个类别(因为它不应该被子类化)...

@implementation UITabBarController (orientation)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
#if DEBUG 
    NSLog(@"UITabBarController (orientation) -> shouldAutorotateToInterfaceOrientation: [%d]",toInterfaceOrientation);
#endif  
    //if(toInterfaceOrientation == UIInterfaceOrientationPortrait) return YES;
//  else return [self.selectedViewController shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
    if (self.selectedViewController == [self.viewControllers objectAtIndex:kLibraryStoreTabIndex])
        return NO;


    if( self.selectedViewController == [self.viewControllers objectAtIndex:kContactTabIndex])

        return YES;
    
// rest of the conditions depending of the tab 

return NO; //last option 

【讨论】:

嗯,我刚刚做了一些测试,并且在不转动设备的情况下切换选项卡时,我的 shouldAutorotateToInterfaceOrientation 类别中的方法没有被调用(这是有道理的)。你手动调用它吗?

以上是关于更改选项卡时忽略自动旋转的主要内容,如果未能解决你的问题,请参考以下文章

未选择选项卡时更改 UITabBarController 选项卡图标颜色

关闭选项卡以关注上一个选项卡而不是第一个选项卡时如何更改 dojo 内容选项卡焦点?

每个选项卡小部件的 PyQt 选项

SwiftUI:Tabview,更改选项卡时保持状态

当我在选项卡布局中更改选项卡时,回收站视图项目正在增加

当以编程方式将选项卡更改为“更多”中的选项卡时,TabbedPage selectedItem 不会更改