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

推送的子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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:03:30