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

如何在Swift/SwiftUI中检测macOS 26 Tahoe当前选中的应用图标样式?

如何在Swift/SwiftUI中检测macOS 26 Tahoe当前选中的应用图标样式?

嘿,这个问题问到点子上了!在macOS 26 Tahoe中,系统把「图标与小组件样式」的设置存在了全局的UserDefaults里,我们可以直接读取对应的键值来判断当前激活的选项,不用绕复杂的系统API~

首先,我们可以先定义一个枚举来对应系统提供的四个样式,让代码可读性更高:

import Foundation

// 对应系统的四个图标与小组件样式
enum IconWidgetStyle: Int, CaseIterable {
    case `default` = 0
    case dark = 1
    case clear = 2
    case tinted = 3
    
    // 方便获取样式的显示名称
    var displayName: String {
        switch self {
        case .default: return "Default"
        case .dark: return "Dark"
        case .clear: return "Clear"
        case .tinted: return "Tinted"
        }
    }
}

接下来写个工具函数就能轻松读取当前的样式:

func getCurrentIconWidgetStyle() -> IconWidgetStyle {
    let defaults = UserDefaults.standard
    // 读取系统存储的样式值,读取失败时默认返回Default
    let styleRawValue = defaults.object(forKey: "com.apple.icon.style") as? Int ?? 0
    return IconWidgetStyle(rawValue: styleRawValue) ?? .default
}

如果是用SwiftUI开发,还可以用@AppStorage自动监听样式变化,体验更流畅:

import SwiftUI

struct IconStyleDemoView: View {
    // 直接绑定系统的样式存储键,默认值对应Default样式
    @AppStorage("com.apple.icon.style") private var iconStyleRawValue: Int = 0
    
    // 计算属性转换为我们定义的枚举类型
    private var currentStyle: IconWidgetStyle {
        IconWidgetStyle(rawValue: iconStyleRawValue) ?? .default
    }
    
    var body: some View {
        VStack(spacing: 20) {
            Text("当前图标与小组件样式:\(currentStyle.displayName)")
                .font(.title)
            
            Button("打印当前样式") {
                print("当前样式:\(getCurrentIconWidgetStyle().displayName)")
            }
        }
        .padding()
        // 实时监听样式切换
        .onChange(of: iconStyleRawValue) { newValue in
            guard let newStyle = IconWidgetStyle(rawValue: newValue) else { return }
            print("样式已切换为:\(newStyle.displayName)")
        }
    }
}

小提醒

  • 这个存储键com.apple.icon.style是macOS 26 Tahoe新增的,目前可以安全读取,但如果未来苹果调整了系统设置的存储逻辑,可能需要更新代码适配。
  • 要是用UIKit开发,可以通过监听UserDefaults.didChangeNotification通知来实时捕获样式变化,效果和SwiftUI的onChange一致。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 09:45:28