self.view.frame在横向模式下意外地改变了大小

Ant*_*ony 3 iphone size landscape frame

我通过IB设置了视图控制器的视图.视图设置为横向,宽度为480,高度为320.它在模拟器中正确加载.但是,当我使用NSLog检查self.frame.size时,我发现帧大小自行改变而没有任何设备或任何代码的旋转.这是我得到的:

在viewDidLoad - > size = 480 x 320

在viewWillAppear - > size = 480 x 320

在viewDidAppear - > size = 320 x 480

我只在viewDidLoad中有代码,但没有viewWillAppear和viewDidAppear.谁知道幕后发生了什么?谢谢.

tc.*_*tc. 14

尝试这样的事情:

NSLog("frame=%@ transform=%@", NSStringFromCGRect(self.frame), NSStringFromCGAffineTransform(self.transform));
Run Code Online (Sandbox Code Playgroud)

我愿意打赌,当帧大小为480x320,旋转90°(0,1,-1,0,0,0或0)时,变换是标识(1,0,0,1,0,0) ,-1,1,0,0,0)当帧大小为320x480时.

这是怎么回事?

好吧,在将视图添加到视图层次结构之前调用viewDidLoad(我认为是 viewWillAppear).当它被添加到层次结构中时,UIKit还会设置视图变换,即旋转发生的方式.

但为什么这会改变框架呢?

好吧,"框架"是相对于父视图,即UIWindow.窗户不旋转; 视图控制器的视图.从窗口的角度来看,一切都在纵向模式下有效.

你可能想要self.view.bounds.