UIKit:如何在导航栏添加纯文本(无需按钮行为)?
在UIKit导航栏添加无交互文本的方法
核心方案:用自定义UILabel包装成UIBarButtonItem
你不需要使用带按钮行为的UIBarButtonItem,可以直接把UILabel作为自定义视图包装成UIBarButtonItem,这样就只显示文本,不会触发点击响应。代码示例:
// 创建得分标签 let scoreLabel = UILabel() scoreLabel.text = NSLocalizedString("Score: \(score)", comment: "") scoreLabel.textColor = .label // 自动适配明暗模式 scoreLabel.font = UIFont.systemFont(ofSize: 16, weight: .semibold) // 将标签包装成BarButtonItem let scoreBarItem = UIBarButtonItem(customView: scoreLabel) // 放到导航栏右侧 navigationItem.rightBarButtonItem = scoreBarItem
关于类似SwiftUI的ToolbarItem位置
UIKit没有完全对应SwiftUIToolbarItemPlacement的枚举,但可以通过navigationItem的属性实现相同效果:
- 对应
.navigationBarTrailing:使用navigationItem.rightBarButtonItem或rightBarButtonItems(支持添加多个视图) - 对应
.navigationBarLeading:使用navigationItem.leftBarButtonItem或leftBarButtonItems - 对应导航栏中间:使用
navigationItem.titleView设置自定义视图
为什么Storyboard添加UITextView失败?
导航栏的内容不能直接通过拖放视图到Storyboard导航栏的方式配置,必须通过UINavigationItem来设置。如果想用Storyboard,可以先添加一个Bar Button Item,再在代码里将它的customView替换为文本视图,不过纯代码方式会更灵活。
补充:动态更新得分的方法
如果需要实时更新得分,直接修改scoreLabel的text属性即可:
scoreLabel.text = NSLocalizedString("Score: \(newScore)", comment: "")
内容的提问来源于stack exchange,提问作者Nizami
相关产品推荐
相关产品推荐

