前幾天手機(jī)更新了
iOS10的系統(tǒng),也把Xcode更新到了8,解決了一些適配的問題,項(xiàng)目正常地跑起來就沒去管。
今天早上偶然打開一個(gè)之前比較少用的界面,發(fā)現(xiàn)界面計(jì)算的高度全亂了,瞬間就懵了。。
PS:這個(gè)問題只是出現(xiàn)在用xib或sb搭的界面
不一樣的frame
iOS10 之前, 我們?cè)?code>xib文件中拖好控件,設(shè)置好約束,拉出控件IBOutlet屬性,然后通常就會(huì)在viewDidLoad或者viewWillAppear做一些設(shè)置跟賦值,甚至碰到一些高度動(dòng)態(tài)的界面,通常也會(huì)拉出約束屬性,根據(jù)控件的frame,然后手動(dòng)計(jì)算constant來計(jì)算該頁面的實(shí)際高度等等操作,這些都能達(dá)到我們想要的效果。
但是在iOS 10中,這些似乎都不能正常的執(zhí)行,原因就是frame的改變。默認(rèn)情況下,系統(tǒng)會(huì)把控件初始化為{0,0,1000,1000},即使你在xib里面設(shè)置好位置跟寬高。因此你會(huì)發(fā)現(xiàn),在viewDidLoad或者viewWillAppear中一旦使用xxx.frame.size.height或者xxx.frame.origin.y,都會(huì)得到1000或者0

解決方法
其實(shí)解決方法很簡單,就是把你在viewDidLoad里面使用到frame計(jì)算或者設(shè)置圓角啊什么的代碼,用一個(gè)私有方法包裝起來,例如:- (void)viewDidCalculateInitialFrame 然后
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[self viewDidCalculateInitialFrame];
}
之后你會(huì)發(fā)現(xiàn),一切又回歸正常了!