iOS 适配iPhone6 plus的时候要注意

以前实习公司是用的是全代码写的程序,所以在可视化布局方面我还算是一个小白。所以不喜勿喷。

今天在做项目的时候发觉之前写的一个控件,在iPhone6之前的机型都很正常,一到了iPhone6 Plus上,控件的frame值就莫名其妙地变大了。
自定义的View好简单,就是一个UIView中添加了两个UIButton。两个btn 的宽度等于100,每个btn的高度都设为50。
OK,我们来看看xib的结构


iOS 适配iPhone6 plus的时候要注意_第1张图片
在reveal中看
iOS 适配iPhone6 plus的时候要注意_第2张图片
xib

然后在控制器中引用我们刚刚写的view

ozxDeview * oview = [[ozxDeview alloc] init];
oview.frame = CGRectMake(0, 64, 100, 100);
[self.view addSubview:oview];

OK我们来看看运行后的情况。

iOS 适配iPhone6 plus的时候要注意_第3张图片
iphone6 plus 效果图
iOS 适配iPhone6 plus的时候要注意_第4张图片
iPhone6 效果图

iPhone5,6图 和6p的图

宽度增加了39,高度增加了69。为什么呢?在iPhone6以及小屏幕手机都不会出现这样的问题,只有在6p上才会出现,奇怪了。

问了一些老手,有的说要将stroyboard删掉,然后LaunchScreen.xib也删掉。(然而这并不能解决问题,难道我以后程序就不用sb来做?不科学啊,不过这也是demo,删就删吧,找原因要紧啊)

删后发觉,iPhone6 变iPhone4s啦。(这个问题好解决)

没有LaunchScreen.xib,也没有设置LaunchImage,只要在images.xcassets上设置LaunchImage就好了,这么简单也就不截图了。

好了,废话也就不说那么多了。到了说原因的时候了。
原来是因为调用该自定义view的控制器的xib的尺寸问题

iOS 适配iPhone6 plus的时候要注意_第5张图片
控制器的属性

这是设置了4.7inch,那么在LayoutSubviews之前,编译器就会检测控制器设定的size,如果设置了4.7,而你运行在了5.5inch的6p上,那么它就会自动帮你扩大你自定义控件的frame

解决方法:
1.将控制器的size改为最大,或者inferred。
2.将oview.frame = CGRectMake(0, 64, 100, 100);放到
-(void)viewWillLayoutSubviews;里面执行

可以在这里下载来玩玩哦
https://github.com/ouzhenxuan/iphone6p_adaptation

你可能感兴趣的:(iOS 适配iPhone6 plus的时候要注意)