Skip to content

Icon 图标 ​

矢量图标。通过逻辑名映射到平台的系统符号(iOS 端为 SF Symbol),尺寸与色调全部走令牌。

契约源:lh-ui-core/specs/icon.json · 黄金用例:lh-ui-core/cases/icon.json(5 条,已翻译为 XCTest,macOS 宿主即可运行)

色调 ​

tone 决定图标颜色。default 跟随主要文字色,regular / secondary 取对应层级文字色,其余取语义色。

9:41Icon 色调

HTML 模拟预览(iOS / SwiftUI 外观),非真机渲染;真机绘制的是 SF Symbol 矢量

swift
LhIcon(name: "star", tone: .primary)

尺寸 ​

三档尺寸映射到 icon.size 令牌。

9:41Icon 尺寸

HTML 模拟预览(iOS / SwiftUI 外观),非真机渲染

图标名映射 ​

name 是与 web 血脉对齐的逻辑名,端侧经 LhIconMap.symbol(for:) 映射到 SF Symbol:

逻辑名SF Symbol
star / search / check / closestar / magnifyingglass / checkmark / xmark
arrow-up / arrow-down / arrow-left / arrow-rightarrow.up / arrow.down / arrow.left / arrow.right
refresh / plus / minus / eye / linkarrow.clockwise / plus / minus / eye / link

未登记的名称不绘制(返回 nil),不会崩溃。

swift
LhIcon(name: "search", size: .large, tone: .secondary) {
  // onClick
}

API ​

Props ​

属性说明类型默认值
name图标逻辑名(经 LhIconMap 映射 SF Symbol)String—
size图标尺寸,映射到尺寸令牌LhIconSize.medium
tone图标色调,映射到文字/语义色令牌LhIconTone.default
onClick点击回调;未传则不响应点击(() -> Void)?nil

LhIconSize ​

值尺寸
.smallicon.size.small(16pt)
.mediumicon.size.medium(20pt)
.largeicon.size.large(24pt)

LhIconTone ​

值颜色
.defaultcolor.text.primary
.primarycolor.primary.default
.successcolor.success.default
.warningcolor.warning.default
.dangercolor.danger.default
.infocolor.info.default
.regularcolor.text.regular
.secondarycolor.text.secondary

令牌对照 ​

令牌用途
icon.size.{small,medium,large}三档尺寸
color.text.{primary,regular,secondary}文字色调
color.{primary,success,warning,danger,info}.default语义色调

黄金用例对照 ​

case id断言本地测试
click-emits-onclick点击触发 onClick 一次View 层 onTapGesture(手势断言需模拟器,见 #Preview)
default-tone-uses-text-primary默认色调取主要文字色testDefaultToneUsesTextPrimary
primary-tone-uses-primary-token主色调取主色令牌testPrimaryToneUsesPrimaryToken
small-size-uses-small-token小号取 small 尺寸令牌testSmallSizeUsesSmallToken
render-emits-icon-command仅绘制一条图标指令testRegisteredIconResolvesToSymbol / testUnknownIconReturnsNilSymbol

另有暗色专项:testDarkColorsComeFromDarkTokens / testDimensionsAreIdenticalInDarkMode。

bash
swift test --filter LhIconTests    # macOS 宿主即可跑,无需模拟器