如何将SwiftUI中@State变量对应图标改为SF Symbols的Touch ID图标?
解决SwiftUI菜单栏Touch ID图标切换问题
错误原因分析
你遇到的问题大概率是两个原因:
- SF Symbols图标名称错误:Touch ID相关图标采用小写+点的命名规则,比如
touchid.circle、touchid.circle.fill,如果拼写错误(比如写成touchID、touch-id)会导致图标加载失败。 - 变量逻辑不匹配:原代码用数字字符串拼接图标名,切换Touch ID图标时,这种拼接逻辑不再适用,需要直接对应正确的图标名称。
修复后的代码示例
如果是要切换Touch ID的「未验证/已验证」状态图标,可参考以下代码:
import SwiftUI @main struct swiftui_menu_barApp: App { // 用布尔值标记验证状态,默认未验证 @State var isAuthenticated: Bool = false var body: some Scene { WindowGroup { ContentView() } MenuBarExtra( // 菜单栏标题随状态切换 isAuthenticated ? "已验证" : "未验证", // 对应不同状态的Touch ID图标 systemImage: isAuthenticated ? "touchid.circle.fill" : "touchid.circle" ) { Button(isAuthenticated ? "标记为未验证" : "标记为已验证") { isAuthenticated.toggle() } } } }
额外提示
- 可以通过Mac上的SF Symbols官方App查看所有可用图标,确认Touch ID相关图标的准确名称。
- 如果需要切换更多Touch ID相关图标,只需修改
systemImage参数对应的图标名即可,确保名称完全匹配SF Symbols的命名规则。
内容的提问来源于stack exchange,提问作者untitled
相关产品推荐
相关产品推荐

