之前对接七陌客服系统,在Demo中跑页面正常,接入自己公司项目时候,出现了多图层问题。遮盖了客服页面。
1七陌那边开发人员建议我自己排查下图层。
我这里排查了很长时间也没找到,最后我只好自己先创建一个什么都不写的控制器,然后用原根视图控制器来跳转。
跳转之后检查图层,出现了两层的导航栏标题。
首先在TabbarController有三个控制器A,B,C
中间有一个展示界面是控制器D
测试的控制器是E
七陌客服使用的是控制器Q
除了ABC之外的控制器,我都是自定义navigationbar的,自定义的navigationbar的,
控制器Q来自第三方,是不隐藏的,默认展示,而且跳转动画也设置为NO。
解决流程
在控制器A中跳转到控制器D,从D,如果从D跳转到E之后,没出现两层导航栏,且从E返回D,再返回A没有出现任何的导航栏展示异常,那么就可以使用控制器Q来替代我的测试控制器E.
这里直接写结果了;
在A控制器中:(注A控制器是tabbarControllers[0] 也就是第一个元素)
- (void)viewWillAppear:(BOOL)animated
self.navigationController.navigationBar.hidden = NO;
//控制器D的构造方法
HPServerCenterCtl * vc = [[ServerCenterCtl alloc] init];
// 用注释的方法会出现问题,各种问题不好排查
// self.navigationController.navigationBar.hidden = YES;
// [self.navigationController pushViewController:vc animated:NO];
**** 重点:push方法
[self.tabBarController.childViewControllers[0].navigationController pushViewController:vc animated:NO];
控制器D中的实现
- (void)viewDidLoad {
self.navigationController.navigationBar.hidden = YES;
- (void)viewWillAppear:(BOOL)animated {
self.navigationController.navigationBarHidden = YES;
- (void)viewWillDisappear:(BOOL)animated {
self.navigationController.navigationBarHidden = NO;
跳转控制器E的实现方法
[self.navigationController pushViewController:vc animated:NO];
控制器E中的实现
- (void)viewDidLoad {
self.navigationController.navigationBar.hidden = YES;
- (void)viewWillDisappear:(BOOL)animated {
self.navigationController.navigationBarHidden = NO;
这是最希望看到的场景的实现方法。
当测试结束后,将控制器E替换成控制器Q即可。
网友评论