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

如何在SwiftUI中获取Button按下时的默认背景高亮色?

SwiftUI 获取List中Button默认高亮色值方案

你要的点击行背景浅灰色是系统定义的List行选中语义色,可通过以下方式动态获取,完全不需要硬编码RGB,可自动适配后续系统版本的样式变更:

  • 方案1:直接封装系统语义色使用
    iOS平台底层依赖UITableView的默认选中背景色,封装后可直接在SwiftUI中作为Color使用:
import UIKit
import SwiftUI

extension Color {
    static var listRowHighlight: Color {
        // 直接读取系统默认的UITableViewCell选中背景色
        Color(UITableViewCell().selectedBackgroundColor ?? .systemGray4)
    }
}

使用时直接调用Color.listRowHighlight即可,自动跟随浅色/深色模式、系统版本更新切换对应色值。

  • 方案2:获取具体RGB数值
    如果需要拿到运行时的RGB数值做其他计算逻辑,可以用UIColor扩展解析对应色值:
import UIKit

extension UIColor {
    func getRGBA() -> (red: Int, green: Int, blue: Int, alpha: CGFloat) {
        var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0
        getRed(&r, green: &g, blue: &b, alpha: &a)
        return (Int(r * 255), Int(g * 255), Int(b * 255), a)
    }
}

// 调用示例
let highlightColor = UITableViewCell().selectedBackgroundColor ?? .systemGray4
let rgba = highlightColor.getRGBA()
// 浅色模式下输出为 (red: 209, green: 209, blue: 214, alpha: 1),和你示例的数值完全一致
  • 多平台适配版本
    如果需要同时适配iOS、macOS等多端,可通过条件编译统一封装:
import SwiftUI

#if os(iOS) || os(tvOS)
import UIKit
extension Color {
    static var listRowHighlight: Color {
        Color(UITableViewCell().selectedBackgroundColor ?? .systemGray4)
    }
}
#elseif os(macOS)
import AppKit
extension Color {
    static var listRowHighlight: Color {
        Color(NSColor.alternateSelectedControlColor)
    }
}
#endif

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:06:02