You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在自定义框架中正确嵌入UINavigationController实现视图跳转

问题原因

你在Storyboard中虽然将根视图控制器嵌入了UINavigationController,但跳转时直接实例化了作为导航子节点的MessagePriviewVC,而非作为入口的UINavigationController,导致这个VC从始至终没有被纳入导航栈管理,因此self.navigationController读取结果始终为nil,所有基于导航栈的pop操作都无法生效。

修复步骤
  • 打开框架内的FAUMEStoryboard,选中作为入口的UINavigationController,给它设置唯一的Storyboard ID,比如命名为FAUMENavRoot
  • 修改外部跳转的初始化逻辑,改为实例化导航控制器后再弹出,示例代码如下:
if let urlString = Bundle.main.path(forResource: "FAUMESDK", ofType: "framework", inDirectory: "Frameworks"),
   let bundle = Bundle(url: URL(fileURLWithPath: urlString)) {
    let sb = UIStoryboard(name: "FAUMEStoryboard", bundle: bundle)
    // 实例化导航控制器作为弹出的根容器
    guard let rootNav = sb.instantiateViewController(withIdentifier: "FAUMENavRoot") as? UINavigationController else { return }
    rootNav.modalPresentationStyle = .fullScreen
    self.show(rootNav, sender: nil)
}
  • 框架内部后续视图控制器的跳转统一使用navigationController?.pushViewController实现,不要直接用present模态弹出业务VC,保证所有内部VC都处于同一个导航栈中
  • 完成以上配置后,你原有的返回根视图代码即可正常运行:
navigationController?.popToRootViewController(animated: true)
可选排查项

如果修改后依然存在问题,可以核对以下配置:

  • 确认Storyboard中的UINavigationController已经勾选Is Initial View Controller,是Storyboard的默认入口
  • 确认所有内部跳转逻辑没有打断导航栈结构,没有中途模态弹出新的VC层级
  • 确认Storyboard ID的拼写、VC的类型转换没有错误

内容的提问来源于stack exchange,提问作者danu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 16:57:03