3

这不是一个重复的问题。尚未提供最终的工作解决方案,因此在我们接受答案或找到并提供我们自己的 100% 工作解决方案之前,请不要关闭此问题。谢谢!

==================================================== ================
使用 Xcode 4.5.1,我们有一个标签栏应用程序,其中有 5 个标签。每个选项卡都包含一个 UINavigationController,因此需要在纵向模式下查看整个 App。有一个例外:我们需要在横向模式下打开并全屏查看“图像库”类型的视图控制器。

我们可以在 iOS5 中使用特定 ViewController 中的以下代码轻松完成此操作:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
   return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

shouldAutorotateToInterfaceOrientation在 iOS6 中已被弃用,不再起作用。
所以,为了让它在 iOS6 中工作,到目前为止,我们已经采取了以下步骤:
1)创建了 UITabBarController(这是我们的 rootViewController)的子类
2)将其设置supportedInterfaceOrientationspreferredInterfaceOrientationForPresentationUIInterfaceOrientationMaskPortrait 但请注意,我们没有实现该shouldAutorotate方法在其中)
3)将 PROJECT/Target 支持的方向设置为 ALL

这几乎可以完美运行:我们的“图像库”视图控制器确实响应了两种横向模式 - 正如它应该 - 但它最初仍以纵向打开 - 这很糟糕。我们需要它在横向中直接打开 - 并且永远不能在纵向中显示。现在它仍然在做这两个。

知道为什么要这样做 - 或如何解决它吗?

4

2 回答 2

1

shouldAutorotateToInterfaceOrientation method is deprecated in iOS 6

try to implements these following methods.

-(BOOL)shouldAutomaticallyForwardAppearanceMethods{   
     // This method is called to determine whether to 
     // automatically forward appearance-related containment
     //  callbacks to child view controllers.
}
-(BOOL)shouldAutomaticallyForwardRotationMethods{
    // This method is called to determine whether to
    // automatically forward rotation-related containment 
    // callbacks to child view controllers.
}

note : these methods just supported in iOS 6.

于 2012-11-12T17:58:22.420 回答
1

我在使用的应用程序遇到了完全相同的问题,这就是我解决它的方法。

首先,我使用纵向代码创建了一个UITabBarController调用的子类NonRotatingTabBarController

NonRotatingTabBarController.h

#import <UIKit/UIKit.h>

@interface NonRotatingTabBarController : UITabBarController
@end

NonRotatingTabBarController.m

#import "NonRotatingTabBarController.h"

@implementation NonRotatingTabBarController

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

@end

现在,当您创建标签栏控制器时,它需要是 NonRotatingTabBarController 的一个实例

self.tabBarController = [[NonRotatingTabBarController alloc] init]; // or whatever initialising code you have but make sure it's of type NonRotatingTabBarController

现在在唯一需要横向支持的视图控制器中,您需要覆盖旋转方法以便它旋转。就我而言,它必须固定为横向

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return (UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight);
}

- (NSUInteger)supportedInterfaceOrientations 
{
    return UIInterfaceOrientationMaskLandscape;
}

在您的项目/目标设置中,您必须为您的应用程序使用的所有界面方向启用支持,否则它将崩溃。让上面的代码负责旋转启用/禁用。

Xcode 项目设置

希望有帮助!

于 2012-11-01T17:18:51.930 回答