关于pushViewController遇到的问题

[self.navigationController pushViewController:nextController animated:NO];  

一般情况下push控制器没什么问题,关键在于,在nextController控制器中有一个动作执行需要较长时间。
这个耗时的方法分别放在viewDidLoad、viewDidAppear里面,tableview可能会卡顿。
原因:nextController执行完viewWillLoad、viewDidLoad、viewWillAppear、viewDidAppear、viewWillLayoutSubviews、viewDidLayoutSubviews之后,页面才会跳转。

更深层次的原因是:因为UIViewController之间的push是以栈的方式实现的,说白了push到下一个controller,其实就是新的controller在上面遮住了旧的controller,那么问题就来了,有这样的需求,刚开始请求网络的时候要求隐藏整个view,等到网络回来的时候再显示,那么会出现所谓的“残影”现象(残留上个页面,过会才消失),其实是推过去的了,只是透明,没遮住旧的controller而已(至于为什么刚开始并不是隐藏UIviewController的self.view,它却是透明,这个问题有待研究)。
既然知道问题的所在了,解决起来就很清晰了,

在跳转之前,(或者直接在要跳转的UIViewController里设)把新controller的view的背景色设为白色
由于实际上新controller的view是在loadView方法中才创建的,所以没有影响,改变的只是默认view的背景色,新的view依然可以自由设置背景色

AddShopViewController *controller = [[AddShopViewController alloc] init];  
controller.view.backgroundColor = [UIColor whiteColor];// 设置背景色为白色,消除残影  
[self.navigationController pushViewController:controller animated:YES]; 

另外个人觉得因为viewWillLoad等等导致的延时其实影响并不是很大,若
为了提升用户体验,追求极致,那么让耗时操作异步执行就可以了。
此外:
在tableview的didSelectRowAtIndexPath:方法中有push控制器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容