使用UISegmentedControl切换导航控制器视图跳转无导航栏问题求助
问题根因
你当前的实现只把导航控制器的view作为普通视图添加到了容器中,没有将导航控制器本身注册为当前父控制器的子控制器,导致导航控制器的生命周期、导航栈管理、导航栏渲染逻辑都无法被系统正常触发,因此push新页面时导航栏不会显示。
修复方案
你需要遵循iOS容器控制器的规范完成子控制器的添加,具体改动如下:
- 首先将两个功能模块对应的导航控制器作为成员变量持有,不要仅存储视图
// 声明成员变量 var filialNav: UINavigationController! var myScheduleNav: UINavigationController!
- 替换原有的视图添加逻辑,完整注册子控制器
// 初始化第一个模块导航 let filialVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "FilialList") as! FilialListController filialNav = UINavigationController(rootViewController: filialVC) // 完成子控制器注册流程 addChild(filialNav) viewContainer.addSubview(filialNav.view) filialNav.didMove(toParent: self) // 适配容器尺寸 filialNav.view.frame = viewContainer.bounds filialNav.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] // 初始化第二个模块导航 myScheduleNav = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MyScheduleNav") as! MyScheduleNavController addChild(myScheduleNav) viewContainer.addSubview(myScheduleNav.view) myScheduleNav.didMove(toParent: self) myScheduleNav.view.frame = viewContainer.bounds myScheduleNav.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] // 初始展示第一个模块 viewContainer.bringSubviewToFront(filialNav.view)
- 后续切换segment只需要调整两个导航控制器的view层级即可,后续从两个模块的页面执行push跳转时,导航栏都会正常显示。
内容的提问来源于stack exchange,提问作者skatty
相关产品推荐
相关产品推荐

