跳到主要内容
menumenu tanreiexpand_morecontrasttranslate
tanreiexpand_more
开始使用WebReactSwiftUIJetpack ComposeFlutterReact Native预设你自己的设计系统与 AI 代理一起使用 Tanrei品牌设计令牌设计系统与定制Theme Studio颜色字体排印图标形状层级动效交互状态行为布局无障碍文字颜色令牌字阶令牌形状令牌层级令牌动效令牌状态令牌间距与度量令牌组件按钮主操作按钮分段按钮按钮组带菜单的按钮工具栏复制按钮复选框单选按钮开关纸片(Chip)菜单滑块滑块字段日历DateTimePicker字段组单选组复选框组下拉选择框下拉选择字段菜单栏文件上传文件选择器 进阶放置区文本输入框 进阶文本字段纸片字段字段组合框 进阶组合框字段数字输入框 进阶数字字段颜色输入框 进阶颜色字段一次性验证码输入框 进阶一次性验证码字段嵌入式文本输入框 进阶聊天输入栏卡片分隔线模态层 进阶对话框列表列表行底部面板侧边面板轮播代码块表格弹出框步骤折叠面板描述列表图示应用外壳页头树视图时间线图片预览调整手柄可调整大小的框滚动区域徽标进度指示器计量条数字滚动器加载指示器消息条(Snackbar)工具提示键盘快捷键标签(Tag)行内代码提示块(Callout)头像空状态标签组(Tag group)骨架屏文件项色块跑马灯文本标签页标签页视图应用栏导航栏导航抽屉搜索链接分页上一页/下一页链接步骤条面包屑目录链接卡片FAB 菜单状态Tanrei 是如何构建的参与贡献许可与致谢
首页开始使用SwiftUI

SwiftUI

通过 Swift Package Manager 把 Tanrei 添加到 iOS 或 macOS 应用中。

content_copy以 Markdown 格式查看

Swift 包 Tanrei 提供 SwiftUI 视图、主题环境和生成的令牌常量。它支持 iOS 17 和 macOS 14 及更高版本,并按 Swift 6 语言模式编写。

尚未发布

Tanrei 尚未发布到 Swift Package Manager。一个平台在跟上当前的规格之后才会发布,在此之前 SwiftUI 的 CI 处于暂停状态。下文“从源码”一节展示如何从 chnotchy/tanrei 添加这个包;“发布之后”一节展示届时的安装方式。

安装

从源码

目前无法构建

SwiftUI 包尚未跟上当前的规格和令牌:它的源码是针对较早版本的生成令牌代码编写的,无法与现在的令牌代码一起编译。在它跟上之前,它的 CI 处于暂停状态,状态页面把它的组件标记为“待跟进”。下面的步骤说明如何把它添加到应用中;等这个包跟上之后,这些步骤就能用了。

把仓库克隆到你的应用旁边,再把这个克隆添加为本地包:在 Xcode 中选择 File → Add Package Dependencies… → Add Local…,然后选择包含 Package.swift 的文件夹;或者写在你自己的 Package.swift 中:

dependencies: [
  .package(path: "../tanrei")
],
targets: [
  .target(name: "App", dependencies: [.product(name: "Tanrei", package: "tanrei")])
]

使用 .package(url: "https://github.com/chnotchy/tanrei", branch: "main"),就会跟随仓库,而不是本地的克隆。

发布之后

在 Xcode 中选择 File → Add Package Dependencies… 并输入仓库的 URL,或者把它添加到 Package.swift:

dependencies: [
  .package(url: "https://github.com/chnotchy/tanrei", from: "<version>")
],
targets: [
  .target(name: "App", dependencies: [.product(name: "Tanrei", package: "tanrei")])
]

包清单位于仓库根目录,因为 Swift Package Manager 从那里解析 Git 依赖。Swift 的发布版本将使用不带前缀的语义化版本标签。

使用

import SwiftUI
import Tanrei

struct DeployView: View {
  @State private var isDeploying = false

  var body: some View {
    TanreiButton("部署", variant: .filled, action: { isDeploying = true })
      .disabled(isDeploying)
  }
}

action: 对应规格中的 click;尾随闭包则是 icon: 插槽(TanreiButton("部署", action: deploy) { Image(systemName: "arrow.up") })。没有 disabled 参数。Tanrei 遵循 SwiftUI 自身的 .disabled(_:) 环境,因此禁用一个容器就会禁用其中的按钮,与系统控件的行为一致。

主题与对比度

默认情况下,Tanrei 跟随系统的配色方案和“增强对比度”这项辅助功能设置。两者都可以用主题修饰符覆盖:

ContentView()
  .tanreiTheme(TanreiTheme(appearance: .dark, contrast: .high))

字体

如果应用注册了相应的字体,字阶会使用 Inter(日文使用 Noto Sans JP,代码使用 Roboto Mono),否则回退到系统字体。文本样式按层级命名,位于环境中的系统对象上(@Environment(\.tanreiSystem) private var system):章节标题用 .tanreiTextStyle(system.typescale.heading2),连续文本用 system.typescale.body,控件用 system.typescale.label。它们会随动态字体(Dynamic Type)缩放;.tanreiTextStyle(system.typescale.heading1, emphasized: true) 会在字重上加上标题系列的强调级差。圆角遵循 system.shape.cornerSmoothing:为 0 时是 .circular,大于 0 的任何值都使用操作系统的 .continuous 圆角。