uni-app 离线打包nvue页面原生导航栏隐藏bug
uni-app 离线打包nvue页面原生导航栏隐藏bug
操作步骤:
- 扩展-》设置中心-》左上角返回-》导航栏无法自动隐藏-》点击离线中心手动隐藏-》nvue页面布局出现错误
预期结果:
- nvue页面(图1)pushViewController 跳转iOS原生页面(图2),返回后导航栏正常隐藏
实际结果:
- 图3图4导航栏出现bug
bug描述:
- nvue页面pushViewController 跳转iOS原生页面,返回后导航栏无法隐藏
信息类别 | 详细信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Mac |
PC版本号 | 11.2.2 (20D80) |
HBuilderX | 正式 |
HBuilderX版本 | 3.1.2 |
手机系统 | iOS |
手机版本号 | IOS 14 |
手机厂商 | 苹果 |
手机机型 | iPhone 11 |
页面类型 | nvue |
打包方式 | 离线 |
项目创建方式 | HBuilderX |
更多关于uni-app 离线打包nvue页面原生导航栏隐藏bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html
解决方案:
在原生工程ViewController.m中修改(同时解决右滑返回问题):
(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:YES]; }
(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.delegate = nil; self.navigationController.interactivePopGestureRecognizer.enabled = NO; } }
(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
更多关于uni-app 离线打包nvue页面原生导航栏隐藏bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个典型的离线打包场景下nvue页面与原生页面交互导致的导航栏状态同步问题。当nvue页面通过pushViewController
跳转到iOS原生页面后,返回时原生导航栏状态未能正确恢复。
问题分析:
- 原生页面与nvue页面的导航栏管理机制不同,状态同步存在时序问题
- 离线打包环境下,原生模块与uni-app运行时的通信可能出现延迟
- 导航栏隐藏/显示状态在页面栈切换时未能及时更新
解决方案:
在nvue页面的onShow
生命周期中强制设置导航栏状态:
onShow() {
// 强制隐藏导航栏
uni.hideNavigationBarLoading()
// 确保导航栏隐藏
plus.navigator.setFullscreen(true)
}