RTRootNavigationController
RTRootNavigationController copied to clipboard
有时候从一级页面点到二级页面会卡死
一级页面点击push进入二级页面有时候会卡死,也返回不了上一级,按Home键再回来已经在二级页面了
二级页面有做些什么事情?
可能是内存泄露
本项目目前没有发现会导致内存泄露的地方,可疑的代码能否提供一下?
我们也会卡死,看view 堆栈,发现push、pop的页面在屏幕外,造成的操作不了。
设置 frame
在 -(void)viewDidLoad
方法中,这里设置会导致 view
提前加载,产生错误的生命周期
你的 VC 的 -(void)viewDidLoad
中有做什么操作?@jiwenyi163
@rickytan
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
[self initial];// 初始化本地参数
[self setupNavigationView];// 设置导航栏,根据页面类型,有可能是搜索拦,或是设置NavigationItem
[self setupViewModel];// 初始化viewModel
[self setupSubViews];//初始化collectionView等
[self setupRefresh];// 初始化下拉刷新、加载更多
[self startAnimating];// 转菊花
[self.viewModel loadNextPage];//请求数据
// 使用自己的返回按钮
self.rt_navigationController.useSystemBackBarButtonItem = YES;
[self requestKeyword];//请求关键词
[self setupScrollHideNavigationBar];// 监听collectionView的contnentOffset的KVO
}
个人感觉可能这些方法调用中,有某个或几个会比较耗时,可以使用二分注释大法,先注释掉前半段,然后注释后半段,看看还卡不卡 :joy: @jiwenyi163
我也遇到了这个问题,因为是偶尔出现,困扰了好久才解决!!!
说下经过: 首先我们在base vc里面自定义了左侧返回按钮导致无法使用左侧边缘右滑返回,然后我们进行了如下设置: self.navigationController.interactivePopGestureRecognizer.enabled = YES; self.navigationController.interactivePopGestureReconigzer.delegate = self;
上面这个设置解决了自定义左侧返回按钮无法使用边缘返回的问题,但是,如果你在root vc,比如放在首页的控制器,你用边缘手势滑动过后,再点击界面元素push进下一个控制器就会出现上面的问题,点了没反应,应用切到后台再回来发现已经push到第二个页面了。
所以在根视图需要设置 self.navigationController.interactivePopGestureRecognizer.enabled = NO; self.navigationController.interactivePopGestureReconigzer.delegate = nil;
然后需要push的地方在把上面的enabled和delegate设置上就行了。
@StefanDai 如果你用的 0.6.0 以前的版本,自定 left item 不会导致无法手势返回,0.6.0 版这一行为修改为跟系统的一致了,但是你也可以在 - viewDidLoad
中显式设置 self.rt_disableInteractivePop = NO;
来开启,不需要修 navigationController 的 interactivePopGestureRecognizer。