Skip to content

Toast 轻提示 ​

声明式轻提示。@Binding var visible 控制显隐,到时自动消失,深色底取 color.ink 令牌。

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

类型 ​

默认类型无图标;其余类型在文字左侧显示一个语义色圆点。深色底 + 白字,对比度由 color.ink 保证。

9:41Toast 类型
已保存

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

9:41Toast 语义
操作成功

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

swift
@State private var visible = false

LhToast(visible: $visible, text: "已保存", type: .success)

定位 ​

三种定位:top(顶部)、center(居中,默认)、bottom(底部)。

9:41Toast 定位
底部提示

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

自动消失 ​

visible 变为 true 时启动 .task 计时,duration 毫秒后自动置回 false 并触发 onClose (黄金用例 auto-hides-after-duration);计时未到时保持显示且不触发回调 (tick-before-duration-keeps-visible);外部手动置 false 不触发回调(hide-is-silent)。

时长单位

令牌 toast.duration 是毫秒(2000),SwiftUI 的 Task.sleep 需要秒,端侧做 Double(duration) / 1000 换算(见 LhToastStyle)。

swift
LhToast(visible: $visible, text: "操作成功", type: .success, duration: 2000) {
  // onClose(仅自动消失时触发)
}

API ​

Props ​

属性说明类型默认值
visible是否显示(受控双向绑定,到时自动置回 false)Bool—
text提示文字String—
type提示类型,决定是否显示圆点及圆点颜色LhToastType.default
position显示位置LhToastPosition.center
duration显示时长(毫秒)Int2000(取 toast.duration 令牌)
onClose自动消失回调(外部手动隐藏不触发)(() -> Void)?nil

LhToastType ​

值圆点色
.default无圆点
.successcolor.success.default
.warningcolor.warning.default
.dangercolor.danger.default
.infocolor.info.default

LhToastPosition ​

值定位
.top顶部(边距 spacing.xl)
.center居中
.bottom底部(边距 spacing.xl)

令牌对照 ​

令牌用途
toast.paddingHorizontal / toast.paddingVertical内边距
toast.fontSize提示文字字号
toast.borderRadius圆角(跟随 radius.small)
toast.gap圆点与文字间距
toast.duration默认显示时长(毫秒)
color.ink深色底(暗色下有专用覆盖,与页面底拉开层次)
color.onPrimary白字
color.{success,warning,danger,info}.default圆点语义色
zIndex.toast层级
spacing.xl顶/底定位边距

黄金用例对照 ​

case id断言本地测试
show-makes-visible显示即渲染testShowMakesVisible
auto-hides-after-duration到时自动隐藏并触发 onClosetestDurationConvertsToSeconds
tick-before-duration-keeps-visible计时未到保持显示testVisibleDuringDuration
hide-is-silent外部手动隐藏不触发回调testHideIsSilent
success-type-uses-success-token成功类型消费成功色与 ink 令牌testSuccessTypeUsesSuccessToken / testInkBackgroundUsesInkToken
hidden-emits-no-commands隐藏时绘制指令为空testHiddenNotRendered

另有专项:testDefaultTypeHasNoDot / testLayoutUsesToastTokens / testDarkColorsComeFromDarkTokens / testDarkInkDiffersFromLightInk / testDimensionsAreIdenticalInDarkMode / testToastViewInitAcceptsConstant。

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