You need to enable JavaScript to run this app. 使用UISegmentedControl切换导航控制器视图跳转无导航栏问题求助
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 23:45:04