点击页面卡住不动,有可能导航栏 title 变化了,但页面没更新,关于左滑手势

最近发现一个问题,在首页有一些操作是要跳转到一个新页面 bVC,但是看到状态栏左上方的小菊花也转圈了,就是页面不跳转,卡住不动了,或者导航栏更新成了bVC,但是 view 没变化。按下 home 键回到桌面,再次点击启动 app,页面显示的是本该跳转的新页面,显然跳转了,但是 UI 没有刷新。再次操作还是一样的效果,双击 home 键划掉 app才恢复正常。很郁闷,不知道怎么回事。在首页如上操作后(应该跳转至新页面,但其实 UI 卡住),,使用左滑手势从右面划出来一部分本该跳转的那个新页面,但不能完全划出(本来应该什么都划不出来的,因为首页就是最上面的 VC),我就猜想有可能是左滑手势的问题。我发现在 BaseVC类调用了

    self.navigationController.interactivePopGestureRecognizer.delegate = self;

也就是说当前navgationController的每个页面都有左滑手势,包括viewController[0],就是这里的问题,当时没注意。左滑手势是为了pop 回上个页面,所以位于当前navgationController的第一个([0])viewController时需要设置手势代理,不响应。
self.navigationController.interactivePopGestureRecognizer.enabled = NO;这句一定要放在viewDidAppear而不是viewWillAppear里

- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    if(self.navigationController){
        if([self.navigationController.viewControllers[0] isEqual:self]) {
            self.navigationController.interactivePopGestureRecognizer.enabled = NO;
            }
    }
}
- (void)viewDidDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];
    if(self.navigationController){
        if([self.navigationController.viewControllers[0] isEqual:self]) {
            self.navigationController.interactivePopGestureRecognizer.enabled = YES;
            }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以通过给每个导航栏按钮绑定点击事件,在点击时切换页面,并使用 JavaScript 动态地更新页面内容。具体的实现方式取决于你的页面结构和设计,以下是一个简单的示例代码: HTML 结构: ```html <nav> <ul> <li><a href="#" data-page="page1">Page 1</a></li> <li><a href="#" data-page="page2">Page 2</a></li> <li><a href="#" data-page="page3">Page 3</a></li> </ul> </nav> <main> <div id="page1" class="page active"> <h1>Page 1</h1> <p>Content for page 1 goes here.</p> </div> <div id="page2" class="page"> <h1>Page 2</h1> <p>Content for page 2 goes here.</p> </div> <div id="page3" class="page"> <h1>Page 3</h1> <p>Content for page 3 goes here.</p> </div> </main> ``` CSS 样式: ```css .page { display: none; } .active { display: block; } ``` JavaScript 代码: ```javascript // 获取所有导航栏按钮和页面元素 const navLinks = document.querySelectorAll('nav a'); const pages = document.querySelectorAll('.page'); // 给每个导航栏按钮绑定点击事件 navLinks.forEach(link => { link.addEventListener('click', e => { e.preventDefault(); // 获取点击页面 ID const pageId = link.dataset.page; // 隐藏所有页面元素 pages.forEach(page => { page.classList.remove('active'); }); // 显示点击页面元素 const pageToShow = document.getElementById(pageId); pageToShow.classList.add('active'); }); }); ``` 这段代码首先获取所有导航栏按钮和页面元素,然后给每个按钮绑定点击事件。当用户点击某个按钮时,它会获取这个按钮的 `data-page` 属性,该属性存储了对应页面的 ID。然后,它会隐藏所有页面元素并显示对应的页面元素。通过添加和删除 `active` 类,CSS 样式可以控制页面元素的显示和隐藏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值