如何在 iOS 6 GM 中的标签栏应用程序中使旋转正常工作?
Posted
技术标签:
【中文标题】如何在 iOS 6 GM 中的标签栏应用程序中使旋转正常工作?【英文标题】:How do I make rotation work properly in iOS 6 GM in a tab bar app? 【发布时间】:2012-09-14 03:49:54 【问题描述】:旋转在 ios 5 上运行良好,但现在根本无法运行。我进行了设置,以便当某个视图打开时,在 Tab 1 上时,我的所有视图都保持纵向异常,然后用户可以旋转,它会显示一个 Coverflow 样式的视图。
我的设置是在运行时在 AppDelegate 中创建我的标签栏。然后我将其设置为主根视图:
self.window.rootViewController = self.tabBarController;
但我的所有视图,在所有选项卡上,现在无论如何都向左或向右旋转。而且我尝试添加新代码(来自论坛中的多个示例)但无济于事......我对所有内容都设置了断点,并且在我旋转手机时不会调用任何旋转代码。
每个 TabController 中都有一个 NavigationController,然后在其中包含我的所有 UI 的主视图。
关于如何在 iOS 6 中正确进行旋转的任何想法或指示?非常令人沮丧,因为这是我在发货前需要解决的最后一个问题。
【问题讨论】:
【参考方案1】:这将使您启动并运行。最终你真的应该继承这些 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
【讨论】:
【参考方案2】:我只需要在 appDelegate 中添加以下方法,以便旋转到
在 iOS 6 上工作。
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:
(UIWindow *)窗口
return UIInterfaceOrientationMaskAll;
至于 ios 4 & 5 还是要使用的地方:
(BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation in the specific view controller
【讨论】:
以上是关于如何在 iOS 6 GM 中的标签栏应用程序中使旋转正常工作?的主要内容,如果未能解决你的问题,请参考以下文章