Ios 为什么ViewController';s的初始方向不是横向的,应该是什么时候?

Ios 为什么ViewController';s的初始方向不是横向的,应该是什么时候?,ios,objective-c,cocoa-touch,orientation,Ios,Objective C,Cocoa Touch,Orientation,我正在制作一个只支持iOS设备横向模式的应用程序。因此,我在shouldAutorotateToInterfaceOrientation:中设置为仅返回UIInterfaceOrientationAndscapeRight的是,并且在Info.plist中将初始方向设置为UIInterfaceOrientationAndscapeRight。应用程序显示良好 问题是,在视图加载完成之前,坐标系不在横向视图中(在这里,我不确定是否正确应用了坐标系)。我所知道的是,它在启动时调用:shouldAut

我正在制作一个只支持iOS设备横向模式的应用程序。因此,我在
shouldAutorotateToInterfaceOrientation:
中设置为仅返回
UIInterfaceOrientationAndscapeRight
的是,并且在
Info.plist
中将初始方向设置为
UIInterfaceOrientationAndscapeRight
。应用程序显示良好

问题是,在视图加载完成之前,坐标系不在横向视图中(在这里,我不确定是否正确应用了坐标系)。我所知道的是,它在启动时调用:
shouldAutorotateToInterfaceOrientation
时会更改为正确的坐标空间。问题是当调用
viewDidLoad
initWithCoder:
时,它位于错误的坐标空间中,
应该自动旋转之前…

我的意思是,如果我使用
CGRectMake(0,0,480,320)
(而不是使用self.view.frame或其他东西)将视图设置为屏幕的全宽,则当坐标空间旋转“校正”时,视图会被损坏。在
viewDidLoad
中创建的视图应用了旋转,因此它们是错误的。这使得在这些方法中设置视图非常痛苦,而且非常不合逻辑。我猜这是一个如何处理方向的问题。为什么会这样?我已经尽可能地告诉它,我只想要风景位置。这可能是界面生成器和属性的问题吗


这是使用标准的
UIViewController
。但是,新视图也是从
viewDidLoad
中的.xib文件加载的。这可能是问题所在吗?

我今天刚刚阅读了
UIViewController
文档,我记得读过这方面的内容

从“操纵视图旋转”概述部分:

默认情况下,UIViewController类仅以纵向模式显示视图。要支持其他方向,必须重写
shouldAutorotateToInterfaceOrientation:
方法,并为子类支持的任何方向返回YES。如果视图的自动调整大小属性配置正确,您可能只需要这样做。但是,UIViewController类为您提供了额外的钩子,以根据需要实现额外的行为

注意:在启动时,应用程序应始终以纵向方向设置界面
应用程序:didFinishLaunchingWithOptions:
方法返回后,应用程序使用上述视图控制器旋转机制在显示窗口之前将视图旋转到适当的方向

我认为可能会给您带来额外麻烦的一件事是,如果您在子视图上设置了
autoresizingMask
选项。如果所有的数字都是错误的,那么预测视图旋转和调整大小时会发生什么会变得非常困难


如果您使用的是自定义UIView,则可能需要覆盖
布局子视图:
以处理可能需要再次布局子视图的不同时间(或调用
setNeedsLayout
)。

您可以在[project]-info.plist文件中重新排列支持的界面方向,将项0值设置为横向(右主页按钮)。

所有iOS开发人员都会时不时地为方向更改提供支持。这通常会让人困惑和沮丧。以下是一条经验法则,可以处理95%的方向更改问题:

与方向相关的界面更改(如帧大小调整)不会发生,直到
视图出现:
。在此之前,您的视图将处于纵向模式,即使您的应用程序中仅支持横向模式,或者您的应用程序已经处于横向模式

由于
viewdiload:
发生在
viewwillbeen:
之前,因此尚未发生方向布局更改。因此,在
viewdiload
中执行以下操作通常会产生不可靠的结果(取决于视图的自动调整大小设置):

  • 在具有与视图边界相等的帧的视图内插入层(如渐变)。插入的层将始终是纵向模式下视图的大小。如果该视图在旋转到横向视图时拉伸,则层将小于视图
  • 尝试确定表视图的大小并将该框架用于其他视图
  • 手动添加子视图控制器,并使用容器视图的框架确定子视图控制器的视图框架

感谢您的深刻评论。在iOS进行旋转检查之前,我正在制作视图的动画,因此这可能会影响结果?尽管我的Info.plist中唯一支持的界面方向是“UIInterfaceOrientation”和“scapeRight”,但我仍然存在此问题.在我看来,这很奇怪。谢谢!这很有帮助。很好的经验法则。