iOS11踩坑记录

记录在iOS 11上遇到的一些问题~

坑1

1
2
3
4
5
-(void)layoutSubviews{
/*此方法在iOS11上引入了新的机制,在执行动画时,会调用此方法刷新UI;
所以如果在此方法中定义了View的frame的话,会引起问题
*/
}

iOS10.3.3下,一个View从创建—>执行show动画—>隐藏

屏幕快照 2017-09-30 下午5.42.25.png

iOS 11下,一个View从创建—>执行show动画—>隐藏

屏幕快照 2017-09-30 下午5.41.35.png

iOS10.3.3执行动画不会调用layoutSubviews方法,而在iOS 11下,当执行动画时,会多次调用layoutSubviews此方法。

1
2
3
4
5
6
7
//这是view的展示动画,在iOS 11上没有效果,研究了很久,最后发现是因为我在`layoutSubviews`初始化的view的frame.
[UIView animateWithDuration:animation?AnimationDelay:0 animations:^{
_topView.frame = CGRectMake(0, -TopViewHeight, ViewSize(self).width, TopViewHeight);
_bottomView.frame = CGRectMake(0, ViewSize(self).height, ViewSize(self).width,BottomViewHeight);
} completion:^(BOOL finished) {
self.hidden = YES;
}];

坑一结论

如果你习惯在layoutSubviews此方法里定义viewframe,可能要针对iOS11做处理。