在不同的视图控制器中,从纵向到横向,反之亦然



如何在具有选项卡栏控制器和导航控制器的应用程序的不同视图中从纵向到横向,反之亦然。。。

我做了

- (void)viewWillAppear:(BOOL)animated
{
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
}

当我想要OrientationLandscapeRight在视图和中时

- (void)viewWillAppear:(BOOL)animated
{
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];
}

当我想要肖像的时候。。

它可以工作,但导航栏没有根据方向进行调整。

尝试使用。。

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft];

你不应该调用这个方法,因为它是私有的,苹果会拒绝你的应用程序,你将无法发布它:

orientation

返回设备的物理方向。(只读)

@property(nonatomic, readonly) UIDeviceOrientation orientation

如果您想为控制器设置特定的支持方向,您需要在其中实现几种方法:

来自Apple文档:UIViewController参考

处理视图旋转在iOS 6中,您的应用程序支持在应用程序的Info.plist文件中定义的界面方向。视图控制器可以覆盖supportedInterfaceOrientations方法以限制支持的方向列表。通常,系统仅在窗口的根视图控制器或为填充整个屏幕而呈现的视图控制器上调用此方法;子视图控制器使用其父视图控制器为其提供的窗口部分,并且不再直接参与关于支持哪些旋转的决策。应用程序的方向遮罩和视图控制器的方向遮罩的交点用于确定视图控制器可以旋转到哪个方向。

您可以覆盖视图控制器的preferredInterfaceOrientationForPresentation,该视图控制器旨在以特定方向全屏显示。

在iOS 5及更早版本中,UIViewController类仅以纵向模式显示视图。若要支持其他方向,必须重写shouldAutorotateToInterfaceOrientation:方法,并对子类支持的任何方向返回YES。如果视图的自动resizing属性配置正确,那可能就是你所要做的。但是,UIViewController类为你提供了额外的挂钩,可以根据需要实现额外的行为。通常,如果视图控制器要用作子视图控制器,则它应该支持所有界面方向。

当可见视图控制器发生旋转时,将在旋转过程中调用willRotateToInterfaceOrientation:duration:、willAnimateRotationToInterfaceOrientation:ducing:和didRotateFromInterfaceOrigination:方法。viewWillLayoutSubviews方法也是在视图由其父视图调整大小和定位后调用的。如果发生方向更改时视图控制器不可见,则永远不会调用旋转方法。但是,当视图可见时,会调用viewWillLayoutSubviews方法。此方法的实现可以调用statusBarOrientation方法来确定设备方向。

相关内容

最新更新