0

如何在具有标签栏控制器和导航控制器的应用程序的不同视图控制器中进行纵向到横向,反之亦然......

我做了

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

 }

当我想要 OrientationLandscapeRight 在视图中时

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

}

当我想要肖像时..

它的工作,但导航栏没有根据方向调整。

4

2 回答 2

0

尝试使用..

 [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft];
于 2012-10-15T16:20:13.547 回答
0

您不应调用此方法,因为它是私有的,Apple 将拒绝您的应用程序,您将无法发布它:

orientation

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

@property(nonatomic, readonly) UIDeviceOrientation orientation

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

来自 Apple Docs:UIViewController 参考

处理视图旋转 在 iOS 6 中,您的应用程序支持在应用程序的 Info.plist 文件中定义的界面方向。视图控制器可以覆盖supportedInterfaceOrientations 方法来限制支持的方向列表。一般情况下,系统只会在窗口的根视图控制器或呈现为填满整个屏幕的视图控制器上调用该方法;子视图控制器使用其父视图控制器为它们提供的窗口部分,并且不再直接参与有关支持哪些旋转的决策。应用程序的方向掩码和视图控制器的方向掩码的交集用于确定视图控制器可以旋转到哪些方向。

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

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

当可见视图控制器发生旋转时,将在旋转期间调用 willRotateToInterfaceOrientation:duration:、willAnimateRotationToInterfaceOrientation:duration: 和 didRotateFromInterfaceOrientation: 方法。viewWillLayoutSubviews 方法也会在视图被其父级调整大小和定位后调用。如果在方向更改发生时视图控制器不可见,则永远不会调用旋转方法。但是,viewWillLayoutSubviews 方法在视图变得可见时被调用。您对此方法的实现可以调用 statusBarOrientation 方法来确定设备方向。

于 2012-10-15T16:20:53.343 回答