使用kukushi/SideMenuSwift时导航栏标题无法修改的解决方法
你遇到的问题核心是:SideMenuController本身并不直接管理导航栏,导航栏属于你包裹内容控制器的UINavigationController,所以之前的设置方式没有命中正确的对象。
正确的两种解决方式:
方式一:在创建导航控制器时直接设置
修改你instantiate方法里的代码,先获取到DeviceScanViewController的实例,再设置它的navigationItem.title,之后再嵌入导航控制器:
extension DeviceScanViewController { static func instantiate() -> UIViewController { // 先获取内容控制器实例 guard let deviceScanVC = UIStoryboard(name: "DeviceScan", bundle: nil).instantiateInitialViewController() as? DeviceScanViewController else { fatalError("无法实例化DeviceScanViewController") } // 设置导航栏标题 deviceScanVC.navigationItem.title = "你的自定义标题" // 嵌入导航控制器 let homeViewController = deviceScanVC.embedInNavigationController() let menuVC = MenuViewController.instantiate() return SideMenuController(contentViewController: homeViewController, menuViewController: menuVC) } }
方式二:在内容控制器的viewWillAppear中设置
如果需要在内容控制器内部动态修改标题,把设置代码放到viewWillAppear(而不是viewDidLoad)中,确保导航控制器已经完成加载:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationItem.title = "Test123" }
为什么之前的方法无效?
- 直接修改
sideMenuController的标题没用,因为SideMenuController本身没有导航栏,它只是作为容器管理内容和菜单控制器。 - 在
viewDidLoad中设置时机过早,此时导航控制器的navigationItem还未完全关联到导航栏上,viewWillAppear是更可靠的时机。
内容的提问来源于stack exchange,提问作者es1
相关产品推荐
相关产品推荐

