本文记录最近遇到的一个奇葩问题,以下是验证过程。
1、使用Xcode6 新建一个项目,设备“Devices”这个选项一定要选择“Universal”。
2、新建一个类,名字随便起,但是一定是UIView或者它的子类。我这里继承的是UIImageView,类名为LamImageView。然后在新建的类的“.m”文件中复写layoutSubviews方法,并在方法里打上一个断点。
3、在默认的ViewController.m文件中导入上一部新建的文件,并实例化一个LamImageView对象,代码如下:
LamImageView *im = [[LamImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 80)];
im.image = [UIImage imageNamed:@"title_1.png"];
[self.view addSubview:im];
以上是准备过程,下面开始验证:
4、Xcode选择iPhone模拟器,运行。然后发现触发了两次断点(为什么是两次这里都不多说,想了解的朋友可以去搜一下相关资料),跳过断点,再使用command+左/右方向键改变模拟器的方向,发现又触发了断点。说明啥问题,说明iPhone设备方向改变后还会调用layoutSubviews方法。
5、Xcode选择iPad模拟器,运行。也触发了断点,但是当改变模拟器方向后,断点没有被触发。是不是就说明,iPad的设备方向改变不会调用layoutSubviews方法。
由此得出:
iPhone:设备方向发生改变时,调用layoutSubviews方法。
iPad:设备方向发生改变时,不调用layoutSubviews方法。
整个验证过程到此结束,希望对大家有所帮助。