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

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) // 禁用系统默认开关样式
    }
}

修复逻辑说明

  1. .toggleStyle(.button):将Toggle转为按钮形态,系统不会再用默认的开关组件替换你的自定义图标,完全保留你设置的star/star.fill样式。
  2. .foregroundColor(favourites ? .green : .primary):直接给图标绑定颜色逻辑,选中时用绿色填充,未选中时用系统默认主色(也可替换为你需要的其他颜色),彻底解决图标本身不变色的问题。

这个方案还会保留Toggle默认的点击反馈(比如按压效果),交互体验不受影响。

内容的提问来源于stack exchange,提问作者Burak Birinci

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:40:34