以前实习公司是用的是全代码写的程序,所以在可视化布局方面我还算是一个小白。所以不喜勿喷。
今天在做项目的时候发觉之前写的一个控件,在iPhone6之前的机型都很正常,一到了iPhone6 Plus上,控件的frame值就莫名其妙地变大了。
自定义的View好简单,就是一个UIView中添加了两个UIButton。两个btn 的宽度等于100,每个btn的高度都设为50。
OK,我们来看看xib的结构
在reveal中看 xib
然后在控制器中引用我们刚刚写的view
ozxDeview * oview = [[ozxDeview alloc] init];
oview.frame = CGRectMake(0, 64, 100, 100);
[self.view addSubview:oview];
OK我们来看看运行后的情况。
iphone6 plus 效果图 iPhone6 效果图iPhone5,6图 和6p的图
宽度增加了39,高度增加了69。为什么呢?在iPhone6以及小屏幕手机都不会出现这样的问题,只有在6p上才会出现,奇怪了。
问了一些老手,有的说要将stroyboard删掉,然后LaunchScreen.xib也删掉。(然而这并不能解决问题,难道我以后程序就不用sb来做?不科学啊,不过这也是demo,删就删吧,找原因要紧啊)
删后发觉,iPhone6 变iPhone4s啦。(这个问题好解决)
没有LaunchScreen.xib,也没有设置LaunchImage,只要在images.xcassets上设置LaunchImage就好了,这么简单也就不截图了。
好了,废话也就不说那么多了。到了说原因的时候了。
原来是因为调用该自定义view的控制器的xib的尺寸问题
这是设置了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
网友评论