1

我在应用程序委托中使用它来为所有视图提供旋转,但在一个视图中并不是我需要重写此方法,因此视图仅支持纵向视图

方法(delegate.m)

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
  return UIInterfaceOrientationMaskPortrait  | UIInterfaceOrientationMaskLandscape;
}
4

2 回答 2

1

为什么不使用UIViewController自身可用的方法呢?

您可以根据需要在特定类中使用这些方法。

- (BOOL)shouldAutorotate
- (NSUInteger)supportedInterfaceOrientations
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

在您的 AppDelegate 中,您已经拥有此方法,您在其他任何地方都不需要它。

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window

{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

来自 Apple 文档

此方法返回界面方向以用于任何未明确指定自己的视图控制器。如果视图控制器没有覆盖 supportedInterfaceOrientations 或 shouldAutorotateToInterfaceOrientation: 方法,则使用此方法返回的方向。

如果您不实现此方法,应用程序将使用应用程序 Info.plist 的 UIInterfaceOrientation 键中的值作为默认界面方向。

如果使用更新UINavigationController

在这种情况下,您需要实现自定义UINavigationController,因为您navigationController可能会干扰您为不同视图控制器提供的界面方向。

自定义导航控制器.h

#import <UIKit/UIKit.h>

@interface CutomNavigationController : UINavigationController
@end

自定义导航控制器.m

#import "CutomNavigationController.h"


@interface CutomNavigationController ()

@end

@implementation CutomNavigationController

//overriding shouldRotate method for working in navController
-(BOOL)shouldAutorotate
{
    
  return   [self.visibleViewController shouldAutorotate];
    
}

-(NSUInteger)supportedInterfaceOrientations
{

      return [self.topViewController supportedInterfaceOrientations];
    
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
  return [self.topViewController preferredInterfaceOrientationForPresentation]; 
}

最后CustomNavigationController在您的中使用它AppDelegate,这将被navigationcontroller所有视图控制器引用为您的

于 2013-03-15T15:53:25.573 回答
0

这都应该在视图控制器中处理。使用 UIViewController 方法:

- (NSUInteger)supportedInterfaceOrientations{}
于 2013-03-15T15:54:36.027 回答