如何在SwiftUI中获取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
相关产品推荐
相关产品推荐

