RTRootNavigationController icon indicating copy to clipboard operation
RTRootNavigationController copied to clipboard

有时候从一级页面点到二级页面会卡死

Open huhood opened this issue 7 years ago • 10 comments

一级页面点击push进入二级页面有时候会卡死,也返回不了上一级,按Home键再回来已经在二级页面了

huhood avatar Apr 11 '17 13:04 huhood

二级页面有做些什么事情?

rickytan avatar Apr 13 '17 08:04 rickytan

可能是内存泄露

huhood avatar Apr 13 '17 09:04 huhood

本项目目前没有发现会导致内存泄露的地方,可疑的代码能否提供一下?

rickytan avatar Apr 23 '17 04:04 rickytan

我们也会卡死,看view 堆栈,发现push、pop的页面在屏幕外,造成的操作不了。

jiwenyi163 avatar Jun 29 '17 05:06 jiwenyi163

设置 frame-(void)viewDidLoad 方法中,这里设置会导致 view 提前加载,产生错误的生命周期

rickytan avatar Jun 29 '17 13:06 rickytan

你的 VC-(void)viewDidLoad 中有做什么操作?@jiwenyi163

rickytan avatar Jun 29 '17 13:06 rickytan

@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
}

jiwenyi163 avatar Jul 01 '17 02:07 jiwenyi163

个人感觉可能这些方法调用中,有某个或几个会比较耗时,可以使用二分注释大法,先注释掉前半段,然后注释后半段,看看还卡不卡 :joy: @jiwenyi163

rickytan avatar Jul 03 '17 01:07 rickytan

我也遇到了这个问题,因为是偶尔出现,困扰了好久才解决!!!

说下经过: 首先我们在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 avatar Jul 06 '17 09:07 StefanDai

@StefanDai 如果你用的 0.6.0 以前的版本,自定 left item 不会导致无法手势返回,0.6.0 版这一行为修改为跟系统的一致了,但是你也可以在 - viewDidLoad 中显式设置 self.rt_disableInteractivePop = NO; 来开启,不需要修 navigationController 的 interactivePopGestureRecognizer。

rickytan avatar Jul 06 '17 13:07 rickytan