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

时间:2010-08-21 03:59:36

标签: iphone size frame landscape

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

在viewDidLoad中 - >尺寸= 480 x 320

在viewWillAppear中 - >尺寸= 480 x 320

在viewDidAppear中 - >尺寸= 320 x 480

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

1 个答案:

答案 0 :(得分:14)

尝试这样的事情:

NSLog("frame=%@ transform=%@", NSStringFromCGRect(self.frame), NSStringFromCGAffineTransform(self.transform));

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

发生了什么事?

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

但为什么会改变框架?

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

你可能想要self.view.bounds。