news 2026/10/20 21:49:39

swiftui-ui-patterns - theming

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
swiftui-ui-patterns - theming

主题化与动态字体

意图

提供清晰、可扩展的主题化方案,使视图代码保持语义化和一致性。

核心模式

  • 使用单个Theme对象作为唯一事实来源(颜色、字体、间距)。
  • 在应用根节点注入主题,并在视图中通过@Environment(Theme.self)读取。
  • 优先使用语义化颜色(primaryBackground、secondaryBackground、label、tint),而不是原始颜色。
  • 将面向用户的主题控件放在专用的设置界面中。
  • 通过自定义字体或.font(.scaled...)应用动态字体缩放。

示例:Theme 对象

@MainActor@ObservablefinalclassTheme{vartintColor:Color=.bluevarprimaryBackground:Color=.whitevarsecondaryBackground:Color=.gray.opacity(0.1)varlabelColor:Color=.primaryvarfontSizeScale:Double=1.0}

示例:在应用根节点注入

@mainstructMyApp:App{@Stateprivatevartheme=Theme()varbody:someScene{WindowGroup{AppView().environment(theme)}}}

示例:视图中的使用

structProfileView:View{@Environment(Theme.self)privatevarthemevarbody:someView{VStack{Text("Profile").foregroundStyle(theme.labelColor)}.background(theme.primaryBackground)}}

应保留的设计选择

  • 保持主题值语义化且精简;避免重复系统颜色。
  • 如有需要,将用户选择的主题值存储在持久化存储中。
  • 确保文本与背景之间具有足够的对比度。

常见陷阱

  • 避免在视图中散落原始Color值;这会破坏一致性。
  • 不要将主题绑定到单个视图的局部状态。
  • 避免将@Environment(\\.colorScheme)作为唯一的主题控制手段;它应作为主题的补充。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 11:48:00

利用预计算上下文,更快速、更低成本地开展支持问题调查

作者:来自 Elastic Abhimanyu Anand 预计算上下文使 Elastic 的支持 agent 的输入 tokens 减少了 58%,延迟降低了 40%,通过减少重复检索,提高了支持问题调查的效率。 Agent Builder 现已正式发布(GA)。立即…

作者头像 李华
网站建设 2026/10/12 3:01:17

南京江宁钢琴比赛培训,正规机构优选

钢琴比赛是检验学习成果、锻炼舞台能力的重要途径,而想在比赛中取得理想成绩,离不开系统化的赛前培训。今天就围绕南京江宁钢琴比赛培训这个话题,从行业常识、市场现状、避坑技巧到机构选择,给大家做一次全面的干货梳理&#xff0…

作者头像 李华