← 所有文章

自定义SF Symbols:可变模板与三个必需源设计

Apple提供了超过6,900个SF Symbols,SF Symbols应用也免费提供。但大多数应用迟早会需要Apple没有的图标:品牌标识、特定领域的字形,或无法纳入系统符号语汇的自定义操作。正确路径通常不是直接放入静态SVG,而是创建自定义SF Symbol。原因很简单:自定义SF Symbol可以直接继承系统机制。它会随Dynamic Type缩放,参与Symbol Effects动画,支持4种渲染模式,与SF Pro排版对齐,并且无需为每个应用额外编写代码,就能遵循辅助功能设置。静态SVG不具备这些能力。

本文围绕SF Symbols应用的可变模板展开。该模板在WWDC 2021随SF Symbols 3引入1。文章的重点是“三个必需源设计是什么,以及为什么需要它们”,因为模板格式才是整个工作流中真正承重的部分,也是设计师和工程师第一次实践时最容易漏掉的环节。后续SF Symbols版本(4、5、6、7)继续扩展了模板格式,加入了可变颜色、Magic Replace过渡、渐变支持和动画效果,但可变模板的核心三源设计结构自SF Symbols 3以来一直保持稳定。

TL;DR

  • 自定义SF Symbols从SF Symbols应用导出的模板开始(File > Export Template,或⌘E2。该模板是一个SVG,包含系统定义的尺寸参考线,以及一个待替换的占位符号设计。
  • 可变模板只需要3个源设计:Ultralight-Small、Regular-Small和Black-Small。SF Symbols应用会自动插值生成其余24种变体(3种尺寸×9种字重)3
  • 路径兼容性是核心要求:所有3个源设计中的每条路径都必须拥有相同数量的锚点、相同的起点和相同的方向。否则,插值会生成畸形字形。
  • 自定义符号支持全部4种渲染模式(monochrome、hierarchical、palette、multicolor)以及图层结构(primary、secondary、tertiary)。Symbol Editor的渲染检查器面板用于将子路径分配到不同图层。
  • 最终交付方式:将符号文件作为Symbol Image Set添加到Xcode资源目录中。SwiftUI通过带符号名称的Image(_:)引用它,其余部分由系统处理。

可变模板

SF Symbols 3(WWDC 2021)引入了可变模板3。它是一个单一SVG文件,包含3个源设计,SF Symbols应用会据此生成完整的27种变体网格。3个源设计分别是:

  • Ultralight-Small。 最轻字重,最小尺寸。
  • Regular-Small。 中等字重,最小尺寸。
  • Black-Small。 最重字重,最小尺寸。

应用会用这3个源设计插值生成其余24个单元格(Ultralight-Medium、Regular-Medium、Black-Medium、Ultralight-Large、Regular-Large、Black-Large,以及每个尺寸下的中间字重)。只要源路径结构兼容,插值过程就会自动完成。

在SF Symbols 3引入可变模板之前,自定义符号需要手动绘制全部27种变体。可变模板把工作量降为3个源设计加自动插值。这正是可控设计投入与足以拖垮项目的工作量之间的差别。

兼容数据要求

路径插值要求3个源路径以相同顺序描述同一个形状2

  • 锚点数量相同。 如果Regular字重下的正方形有4个锚点,那么Ultralight和Black下也必须有4个锚点,即便可见曲率不同。
  • 起点相同。 路径的第一个锚点必须处在相同的概念位置上,例如始终是左上角。
  • 方向相同。 3条路径必须以相同顺序遍历形状,也就是同为顺时针或同为逆时针。

任一条件不满足,都会产生插值瑕疵:折痕、错误重叠、笔画缺失。SF Symbols应用会暴露其中一部分问题(变体预览会显示插值结果),但更细微的问题可能只会在最终导出的资源中显现。

务实的工作流是先设计Regular-Small,再基于同一套路径骨架减小笔画宽度得到Ultralight,并增大笔画宽度得到Black。这样,每次派生都会天然保留锚点数量、起点和方向。分别独立设计各个字重,往往会制造兼容性问题,调试时间甚至比重新构建还长。

工作流

从概念到可用资源,一共5步:

1. 找到结构相近的现有符号

SF Symbols应用的库中有6,900多个符号。先找到一个在结构上接近您概念的符号,例如带内容的圆形、带叠层的方形、带装饰的线条。导出模板时,会以现有符号的几何结构作为起点。

2. 导出模板

使用File > Export Template…⌘E。模板类型选择“Variable”。导出的结果是一个SVG文件,其中排布了该符号的3个源字重,并包含参考几何信息,展示SF Symbols用于和SF Pro文本对齐的大写字母高度、基线和视觉边距。

3. 替换模板路径

用矢量编辑器打开SVG(Sketch、Figma、Illustrator、Affinity Designer、Inkscape)。模板中的命名图层包含3个源设计。用自定义设计替换它们,同时保留图层名称,以及大写字母高度和基线对齐关系。

此处必须重视路径兼容性要求:每个字重都应从同一套路径骨架设计,通过改变笔画宽度或填充粗细来变化,而不是重新绘制。矢量工具里的“复制并修改”通常是阻力最小的做法。

4. 重新导入并验证

将修改后的SVG拖回SF Symbols应用。应用会生成27种变体,并在变体网格中显示。请在多个缩放级别检查每一种字重和尺寸组合;插值瑕疵常常出现在中间字重,不一定一眼就能看到。

对于包含多个视觉元素的符号(例如主体加徽章、圆形加内部形状),打开渲染检查器面板,将子路径分配到图层(primary、secondary、tertiary)。这些图层分配会决定符号在hierarchical、palette和multicolor模式下如何渲染。

5. 添加到Xcode

将符号文件(从SF Symbols导出的.svg)拖入Xcode资源目录。Xcode会将其视为Symbol Image Set。代码中这样引用:

Image("MyCustomSymbol")
    .symbolRenderingMode(.hierarchical)
    .foregroundStyle(.tint)

Image(_:)(不带systemName:参数)会从资源目录加载。只要符号制作正确,系统符号可用的.symbolRenderingMode.foregroundStyle.symbolEffect和Dynamic Type行为,同样适用于自定义符号。

渲染模式与图层结构

SF Symbols公开的4种渲染模式,在自定义符号和系统符号上的工作方式一致4

  • Monochrome。 单色(foregroundStyle)。这是最简单、也最常用的模式。
  • Hierarchical。 单色,但按图层使用不同不透明度。渲染检查器面板中定义的图层会获得预设不透明度;开发者只需应用一种色调,即可自动得到视觉层级。
  • Palette。 每个图层显式指定颜色。开发者传入多个foregroundStyle参数,每个图层使用各自的颜色。
  • Multicolor。 每个图层使用Apple定义的固定颜色。对于自定义符号,颜色来自设计师在Symbol Editor的Multicolor配置中指定的值。

图层结构正是hierarchical、palette和multicolor能够工作的基础。没有图层分配的自定义符号会把所有路径折叠到primary图层中;它仍然能以monochrome方式渲染,但在其他模式下不会产生视觉层级。任何能够从层次中受益的符号,都值得花几分钟在渲染检查器面板里分配图层。

常见失败模式

自定义符号失败日志中常见3类问题:

违反路径兼容性。 这是最常见的问题。一个符号“在Regular字重下看起来没问题”,但中间字重出现异常,几乎总是路径兼容性出了问题。诊断方法:打开SF Symbols应用的变体网格,查看中等字重变体;如果出现折痕,或笔画不符合预期插值结果,那么3个源路径中至少有一个违反了兼容性要求。

基线或大写字母高度错位。 如果设计符号时没有遵循模板的基线参考线,它和文本放在一起时就会显得别扭。可见症状是:符号与使用.body文本样式的Text内联放置时,看起来过高或过低。修复方式:使用模板的参考几何,将符号的视觉中心放在大写字母高度的中点。

没有图层分配。 一个内部结构丰富的符号(包含多个视觉元素)如果没有图层分配,只有在monochrome模式下才会正确呈现。应用选择hierarchical或palette模式时,会得到扁平输出。修复方式:打开渲染检查器面板,将每个子路径分配到对应图层(主形状用primary,强调元素用secondary,更细的补充细节用tertiary)。

这一模式对iOS 26+应用意味着什么

有3点结论。

  1. 应用内图标应使用自定义SF Symbols,而不是原始SVG。 自定义符号工作流确实是工程工作,但系统集成能力(Dynamic Type、Symbol Effects、渲染模式、辅助功能)让这项成本对任何长期存在于UI中的图标都物有所值。静态SVG适合一次性的营销素材,不适合作为核心UI。

  2. 从单一骨架开始设计;改变笔画粗细,而不是改变路径结构。 违反路径兼容性是最关键的失败模式。稳妥的设计流程是从一个字重(Regular-Small)开始,再基于同一套路径几何减小笔画得到Ultralight、增大笔画得到Black。这样,兼容性从构造上就能成立。

  3. 任何能从渲染模式中受益的符号,都应显式分配图层。 一个只能以monochrome渲染的符号,等于放弃了SF Symbols系统的一半能力。渲染检查器面板只需要几分钟;得到的符号则可以和系统符号一样参与hierarchical、palette和multicolor模式。

完整的Apple生态系统文章集包括:类型化的App IntentsMCP服务器路由问题Foundation Models执行环境与工具链LLM之别三个界面单一事实来源模式两个MCP服务器Apple开发钩子Live ActivitieswatchOS执行环境SwiftUI内部机制RealityKit的空间思维模型SwiftData模式纪律Liquid Glass模式多平台发布平台矩阵Vision框架Symbol EffectsCore ML推理Writing Tools APISwift TestingPrivacy Manifest作为平台能力的辅助功能SF Pro排版visionOS空间模式Speech框架SwiftData迁移tvOS焦点引擎@Observable内部机制SwiftUI Layout协议深度解析我拒绝写什么。总入口在Apple生态系统系列。如需更宽泛的iOS与AI代理背景,请参阅iOS代理开发指南

FAQ

我是否必须使用SF Symbols应用,还是可以用其他方式创建自定义符号?

SF Symbols应用是官方工具,也是唯一能生成经过验证、符合App Store要求的自定义符号的工具。第三方工具和在线转换器确实存在,但它们生成的SVG不一定满足模板格式要求。生产应用应使用SF Symbols应用。

可以在Windows上创建自定义符号吗?

SF Symbols应用仅支持macOS。您可以在任何平台上用矢量编辑器修改导出的SVG模板,但导出和重新导入步骤需要macOS。大多数团队至少会有一名使用macOS的设计师处理这些步骤;远程团队通常通过版本控制或共享存储来传递SVG文件。

如何让自定义符号支持.symbolEffect

只要符号结构良好,大多数符号效果都会自动生效:bounce、pulse、scale以及其他效果都会应用到符号上,不受其来源影响。.replace内容过渡要求起始符号和目标符号具有兼容结构(图层数量相近、整体形状相近)。本系列的Symbol Effects文章详细介绍了效果语汇。

Xcode中的Symbol Image Set和普通Image Set有什么区别?

Symbol Image Set会导入符号的完整模板(全部27种变体),并通过SF Symbols的渲染管线公开这些变体。符号会随Dynamic Type缩放,参与渲染模式,并可配合.symbolEffect使用。普通Image Set是静态栅格或SVG资源,不参与这些机制。自定义SF Symbols应使用Symbol Image Set。

自定义符号如何处理visionOS和watchOS?

方式与系统符号相同:它们会以平台预期尺寸渲染(watchOS偏小,visionOS偏大),参与平台辅助功能,并遵循平台的颜色与效果惯例。自定义符号只需制作一次,跨平台行为由系统自动完成。本系列的Apple平台矩阵visionOS空间模式文章介绍了各平台需要考虑的事项。

对App Store审核有什么影响?

没有特殊影响。自定义SF Symbols会像其他Asset Catalog资源一样接受审核。视觉风格准则(不要冒充Apple的UI模式,不要侵犯品牌商标)同样适用于自定义符号和其他自定义美术资源;除此之外,审核流程会将其视为标准图片资源。

参考资料


  1. Apple Developer:SF Symbols。应用下载、符号库浏览器,以及自定义符号创建文档入口。 

  2. Apple Developer Documentation:Creating custom symbol images for your app。Apple关于模板导出、SVG结构、路径兼容性要求和Xcode资源目录导入的权威指南。 

  3. Apple Developer:Create custom symbols(WWDC 2021 session 10250)。介绍可变模板格式和三源设计工作流。 

  4. Apple Developer Documentation:SymbolRenderingMode。4种渲染模式(.monochrome.hierarchical.palette.multicolor)以及它们与图层结构的交互。 

相关文章

Symbol Effects:SwiftUI为每个图标内置的动画词汇

SF Symbols为每个iOS应用提供了一套通用动画词汇。Bounce、pulse、scale、replace、variable color、breathe:已设计完毕、无障碍友好、免费可用。

1 分钟阅读

SwiftUI 中的 Liquid Glass:在 iOS 26 上交付 Return 总结的三种模式

苹果的 Liquid Glass 是一行 SwiftUI API。Return 的三种模式超越了 .glassEffect():通过 Core Text 字形路径在文本上实现玻璃效果、镜面反射,以及 HUD 叠层。

7 分钟阅读

审美是基础设施

当智能体生成越来越多最终交付的产出时,质量上限取决于你将审美判断编码进系统的能力。审美在变得可查询时才能规模化。

1 分钟阅读