最近在项目中遇到一个很蛋疼的问题,用AutoLayOut做自适应,当从主界面push到二级界面查看详情的时候,进入详情页下部有控件多了一个下沉的过程(如配图)
想了好久最后我认定一定是tabbar隐藏的过程的动画导致的,于是决定对问题原因进行动刀,既然tabbar在隐藏的时候push动画还没加载完全,当页面还没有出现在屏幕上的时候AutoLayOut便绘制了一遍,View的大小是按照不包括tabbar高度的大小绘制的,当tabbar彻底隐藏后,view加载完成又根据当前View的大小重新自适应了控件的位置,导致出现这样的问题,那么问题来了,我们怎么修改呢?我最终定下的方案就是在push到下级页面的时候就把View的大小给重绘下就搞定了,在二级VC写入代码:
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
if (! _isAppear)
{
self.view.frame = _CGR(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, [[UIScreen mainScreen] bounds].size.height);
}
_isAppear =YES;
}
这个_isAppear是BOOL成员变量来控制View第一次加载的状态,系统在赋值的时候会默认设置成NO,记得在用完一定要设置成YES 搞定!