iOS10 View的frame的坑

2016-09-21  本文已影响1185人  我叫阿水

前几天手机更新了iOS10的系统,也把Xcode更新到了8,解决了一些适配的问题,项目正常地跑起来就没去管。
今天早上偶然打开一个之前比较少用的界面,发现界面计算的高度全乱了,瞬间就懵了。。
PS:这个问题只是出现在用xib或sb搭的界面

不一样的frame

iOS10 之前, 我们在xib文件中拖好控件,设置好约束,拉出控件IBOutlet属性,然后通常就会在viewDidLoad或者viewWillAppear做一些设置跟赋值,甚至碰到一些高度动态的界面,通常也会拉出约束属性,根据控件的frame,然后手动计算constant来计算该页面的实际高度等等操作,这些都能达到我们想要的效果。

但是在iOS 10中,这些似乎都不能正常的执行,原因就是frame的改变。默认情况下,系统会把控件初始化为{0,0,1000,1000},即使你在xib里面设置好位置跟宽高。因此你会发现,在viewDidLoad或者viewWillAppear中一旦使用xxx.frame.size.height或者xxx.frame.origin.y,都会得到1000或者0

Paste_Image.png

解决方法

其实解决方法很简单,就是把你在viewDidLoad里面使用到frame计算或者设置圆角啊什么的代码,用一个私有方法包装起来,例如:- (void)viewDidCalculateInitialFrame 然后

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    [self viewDidCalculateInitialFrame];
}

之后你会发现,一切又回归正常了!

上一篇下一篇

猜你喜欢

热点阅读