前几天手机更新了
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
解决方法
其实解决方法很简单,就是把你在viewDidLoad
里面使用到frame
计算或者设置圆角啊什么的代码,用一个私有方法包装起来,例如:- (void)viewDidCalculateInitialFrame
然后
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[self viewDidCalculateInitialFrame];
}
之后你会发现,一切又回归正常了!