3

旋转在 iOS 5 上运行得很好,现在它根本不起作用。我进行了设置,以便当某个视图打开时在 Tab 1 上时,我的所有视图都保持纵向异常,然后用户可以旋转,它会显示一个覆盖流样式的视图。

我的设置是在运行时在 AppDelegate 中创建我的标签栏。然后我将其设置为主根视图:

self.window.rootViewController = self.tabBarController;

但是我所有的视图,在所有选项卡上,现在无论如何都向左或向右旋转。而且我尝试添加新代码(来自论坛中的多个示例)但无济于事......我对所有内容都设置了断点,并且当我旋转手机时不会调用任何旋转代码。

每个 TabController 在其中都有一个 NavigationController,然后在其中包含我的所有 UI 的主视图。

关于如何在 iOS 6 中正确进行旋转的任何想法或指示?非常令人沮丧,因为这是我发货前需要解决的最后一个问题。

4

2 回答 2

3

这将使您启动并运行。最终你真的应该继承这些 UIKit 类而不是使用类别,但不幸的是,这不适用于尚未为 iOS 6 修复的第三方库。这些类别应该适用于所有事情,而不需要你在其他人的代码中捣乱。

对于不涉及子类化(或编写类别)的问题,UITabBarController我还没有看到任何解决方案。UINavigationController不过,我希望存在一个。

确保在 Prefix.pch 文件的顶部导入三个 .h 文件(如果您选择将它们全部添加到单个文件中,则导入一个)。您必须确保尽快加载此代码!

UITabBarController+LegacyRotation.h

#import <UIKit/UIKit.h>

@interface UITabBarController (LegacyRotation)

@end

UITabBarController+LegacyRotation.m

#import "UITabBarController+LegacyRotation.h"

@implementation UITabBarController (LegacyRotation)

- (NSUInteger)supportedInterfaceOrientations
{
    return [self.selectedViewController supportedInterfaceOrientations];
}

- (BOOL)shouldAutorotate
{
    return [self.selectedViewController shouldAutorotate];
}

@end

UINavigationController+LegacyRotation.h

#import <UIKit/UIKit.h>

@interface UINavigationController (LegacyRotation)

@end

UINavigationController+LegacyRotation.m

#import "UINavigationController+LegacyRotation.h"

@implementation UINavigationController (LegacyRotation)

- (NSUInteger)supportedInterfaceOrientations
{
    return [self.topViewController supportedInterfaceOrientations];
}

- (BOOL)shouldAutorotate
{
    return [self.topViewController shouldAutorotate];
}

@end

UIViewController+LegacyRotation.h

#import <UIKit/UIKit.h>

@interface UIViewController (LegacyRotation)

@end

UIViewController+LegacyRotation.m

#import "UIViewController+LegacyRotation.h"

@implementation UIViewController (LegacyRotation)

- (NSUInteger)supportedInterfaceOrientations
{
    NSUInteger ret = 0;

    if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortrait]) {
        ret |= UIInterfaceOrientationMaskPortrait;
    }
    if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortraitUpsideDown]) {
        ret |= UIInterfaceOrientationMaskPortraitUpsideDown;
    }
    if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft]) {
        ret |= UIInterfaceOrientationMaskLandscapeLeft;
    }
    if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight]) {
        ret |= UIInterfaceOrientationMaskLandscapeRight;
    }

    return ret;
}

- (BOOL)shouldAutorotate
{
    return YES;
}

@end
于 2012-09-23T05:26:53.883 回答
0

我只需要在 appDelegate 中添加以下方法,以便旋转到

在 iOS 6 上工作。

-(NSUInteger)应用程序:(UIApplication *)应用程序支持的InterfaceOrientationsForWindow:

(UIWindow *)窗口{

           return UIInterfaceOrientationMaskAll;

}

至于 ios 4 & 5,我们仍然必须使用:

(BOOL) 应该AutorotateToInterfaceOrientation:

               (UIInterfaceOrientation)interfaceOrientation in the specific view controller
于 2012-11-05T14:06:43.250 回答