SwiftUI Toggle异常:star.fill变为star.square.fill且星星未正确变绿
SwiftUI Toggle星星图标问题修复
你遇到的两个问题根源在于系统默认的Toggle样式会覆盖自定义图标,而且导航栏里的Toggle会受到额外的系统样式干预,直接设置tint只会影响Toggle的外围区域而非图标本身。这里给你针对性的修复方案:
- 禁用系统默认的开关样式,改用按钮样式,让自定义图标完全可控
- 直接给图标设置颜色,根据选中状态切换填充色和轮廓色
修改后的代码如下:
.toolbar { ToolbarItem(placement: .navigationBarTrailing) { Toggle(isOn: $favourites) { Image(systemName: favourites ? "star.fill" : "star") .foregroundColor(favourites ? .green : .primary) // 直接控制图标颜色 } .toggleStyle(.button) // 禁用系统默认开关样式 } }
修复逻辑说明
.toggleStyle(.button):将Toggle转为按钮形态,系统不会再用默认的开关组件替换你的自定义图标,完全保留你设置的star/star.fill样式。.foregroundColor(favourites ? .green : .primary):直接给图标绑定颜色逻辑,选中时用绿色填充,未选中时用系统默认主色(也可替换为你需要的其他颜色),彻底解决图标本身不变色的问题。
这个方案还会保留Toggle默认的点击反馈(比如按压效果),交互体验不受影响。
内容的提问来源于stack exchange,提问作者Burak Birinci
相关产品推荐
相关产品推荐

