推送的子ViewController右侧导航栏按钮不显示,仅消失时短暂出现
导航栏右侧按钮在子视图控制器无法正常显示的解决办法
问题根源
你在两个视图控制器中均通过navigationController?.navigationBar.topItem?.rightBarButtonItem设置导航栏按钮,这种方式会与UINavigationController的导航栏管理逻辑冲突,导致子VC的按钮无法被正确渲染,仅在视图消失时短暂出现。
修正后的代码
第一个视图控制器
// 第一个VC的实现 navigationItem.setHidesBackButton(true, animated: true) navigationController?.navigationBar.tintColor = .gray600 let stackView = UIStackView() stackView.addArrangedSubviews(views: [registerButton, notificationButton]) stackView.spacing = 16 let rightBarButton = UIBarButtonItem(customView: stackView) // 改为设置当前VC自身的navigationItem navigationItem.rightBarButtonItem = rightBarButton
子视图控制器
// 子VC的实现 navigationController?.navigationBar.tintColor = .gray600 // 直接设置当前VC的backButtonTitle,而非通过navigationBar.topItem navigationItem.backButtonTitle = "" navigationController?.navigationBar.backIndicatorImage = .back navigationController?.navigationBar.backIndicatorTransitionMaskImage = .back let rightBarButton = UIBarButtonItem(customView: editButton) // 设置当前VC自身的navigationItem navigationItem.rightBarButtonItem = rightBarButton
原理说明
UINavigationController会根据当前显示的视图控制器的navigationItem来渲染导航栏内容。直接修改navigationBar.topItem会绕过系统的状态管理机制,尤其是在push过渡过程中,系统会重置导航栏状态,导致你的设置无法持久生效。改为设置当前VC自身的navigationItem,能让系统正确识别并渲染导航栏内容。
内容的提问来源于stack exchange,提问作者doori
相关产品推荐
相关产品推荐

