我通过IB设置了视图控制器的视图。视图设置为横向,宽度为480,高度为320.它在模拟器中正确加载。但是,当我使用NSLog检查self.frame.size时,我发现帧大小自行改变而没有任何设备或任何代码的旋转。这是我得到的:
在viewDidLoad中 - >尺寸= 480 x 320
在viewWillAppear中 - >尺寸= 480 x 320
在viewDidAppear中 - >尺寸= 320 x 480
我只在viewDidLoad中有代码,但不是viewWillAppear和viewDidAppear。谁知道幕后发生了什么?感谢。
答案 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。