View in English

  • Apple 开发者
    • 入门汇总

    探索“入门汇总”

    • 概览
    • 学习
    • Apple Developer Program

    及时了解最新动态

    • 最新动态
    • 开发者你好
    • 平台

    探索“平台”

    • Apple 平台
    • iOS
    • iPadOS
    • macOS
    • Apple tvOS
    • visionOS
    • watchOS
    • App Store

    精选

    • 设计
    • 分发
    • 游戏
    • 配件
    • 网页
    • Home
    • CarPlay 车载
    • 技术

    探索“技术”

    • 概览
    • Xcode
    • Swift
    • SwiftUI

    精选

    • 辅助功能
    • App Intents
    • Apple 智能
    • 游戏
    • 机器学习与 AI
    • 安全性
    • Xcode Cloud
    • 社区

    探索“社区”

    • 概览
    • “与 Apple 会面交流”活动
    • 社区主导的活动
    • 开发者论坛
    • 开源

    精选

    • WWDC
    • Swift Student Challenge
    • 开发者故事
    • App Store 大奖
    • Apple 设计大奖
    • Apple Developer Centers
    • 文档

    探索“文档”

    • 文档库
    • 技术概述
    • 示例代码
    • 《人机界面指南》
    • 视频

    发布说明

    • 精选更新
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • Apple tvOS
    • Xcode
    • 下载

    探索“下载”

    • 所有下载
    • 操作系统
    • 应用程序
    • 设计资源

    精选

    • Xcode
    • TestFlight
    • 字体
    • SF Symbols
    • Icon Composer
    • 支持

    探索“支持”

    • 概览
    • 帮助指南
    • 开发者论坛
    • “反馈助理”
    • 联系我们

    精选

    • 《开发者账户帮助》
    • 《App 审核指南》
    • 《App Store Connect 帮助》
    • 即将实行的要求
    • 协议和准则
    • 系统状态
  • 快速链接

    • 活动
    • 新闻
    • 论坛
    • 示例代码
    • 视频
 

视频

打开菜单 关闭菜单
  • 专题
  • 所有视频
  • 关于

更多视频

  • 简介
  • 概要
  • 转写文稿
  • 代码
  • 针对动态字体准备好你的 Apple tvOS App

    借助动态字体,用户能够选择最适合自己的文本大小,以便轻松自在地阅读,并与你的 App 进行交互。你将了解如何通过一些实用技巧来实现字体缩放并针对大字号内容调整布局,从而让你的 App 为 tvOS 上的动态字体做好准备。你还将探索如何优化以媒体为中心的界面 (如网格和轮播),确保每一位需要调整文本大小的用户都能获得出色的体验。

    章节

    • 0:01 - Introduction
    • 2:46 - Identify common issues
    • 6:13 - Adapt your layout

    资源

    • Applying custom fonts to text
    • Scaling fonts automatically
      • 高清视频
      • 标清视频

    相关视频

    WWDC24

    • 动态字体体验入门
  • 搜索此视频…

    大家好,我是Isis,是无障碍功能团队的 工程经理。

    今年,Apple tvOS 27的无障碍功能 带来了好消息。 大字体支持现已推出, 为平台上的每个App带来 全系统范围的文字缩放功能。 许多人需要或偏好 不同的文字大小, 让你的App支持动态调整 可以帮助每个人获得出色的体验。 你的Apple tvOS App用户一直在等待 这项无障碍功能。 我将向你展示如何 在App中充分利用这一功能。 此外,你还可以在 App Store的Apple tvOS 无障碍营养标签中 标注对大字体的支持。 这是接触专门寻找 支持大字体的无障碍App的用户的好方法, 以及支持大字体的App。

    在本讲座中,我将首先介绍 大字体在Apple tvOS上的工作原理, 以及用户在哪里可以找到它。 然后,我将介绍如何识别 App中需要调整的小部分, 以适应更大的文字大小。 最后,我将列举 几个示例, 说明如何根据文字大小 调整布局。

    让我们先来了解概况。 如果你熟悉iOS上的 Dynamic Type, 你已经有了良好的开端! Dynamic Type在Apple tvOS上的工作方式相同。 UIKit和SwiftUI可以 根据用户的偏好自动调整文字大小, 基于他们的偏好设置。 这让人们能够控制 文字大小, 以匹配他们的需求和偏好。 用户可以在"设置"App中 开启大字体。 导航至"辅助功能"、"显示", 然后选择"文字大小"。 他们可以选择文字大小, 从"大"一直到 "无障碍XXXL"。 我正在开发一款媒体App, 让用户发现并观看 他们最喜爱的电影。 下面展示这款App如何适应 这些更大的文字大小。 这款媒体App顶部有一个 用于导航的标签栏。 有一个大标题, 以及几个操作按钮, 下方是一个收藏视图, 展示可以浏览的电影海报。 开启大字体后, 顶部的导航标题 变得更大了。 在标签栏中,每个标签现在更大了, 界面中的所有文字 都显著放大了。 标准的UIKit和SwiftUI组件, 如标签、按钮 和导航标签栏, 会自动处理这些变化。 对于你的App, 你只需识别并更新 任何可能需要处理的 自定义元素。

    在检查App的大字体支持时, 有几类需要识别的问题。 当你的App以更大的文字大小运行时, 你需要确保避免使用 固定字体大小, 这会阻止文字缩放。 不适应Dynamic Type的界面, 如硬编码的大小或约束, 可能会导致文字截断等问题, 或UI元素被裁剪。 你可能还需要调整布局, 以满足某些元素变大时 所需的内边距和间距。 这里有一个来自我的媒体App的示例, 展示了电影描述的显示方式。 顶部显示了标题, 底部有文字标签和控件。

    将文字设置为最大大小时, 大多数文字变大了…… 但左侧有一个文字元素 没有缩放。 那是显示"注册信息"的说明文字, 位于让用户注册的 控件上方, 购买或租借电影。 现在,这样的说明文字 可能有硬编码的文字大小, 是出于特定的布局原因。 例如,它可能最初 放在一个 具有静态尺寸或 刚性约束的容器中。 虽然这在创建可预测布局时 看起来很有吸引力, 但不推荐这样做。 这种方法缺乏灵活性, 无法适应大字体。 相反,应让布局更灵活, 并移除硬编码的值。 以下是代表我的媒体App 描述视图的代码。 它有一个VStack,包含 "注册信息"说明文字, 以及一个包含按钮的HStack, 以及关于电影的 其他文字信息。 此代码包含一些大字体方面的 不同挑战。 它指定了固定的字体大小, 不会自动适应, 当有人更改 其大小偏好时。

    在文字视图上, 有一个固定宽度约束 为300点。

    随着文字增大,300点 可能不足以容纳文字, 这可能导致文字截断。 要使这个说明文字 适应大字体, 我将用语义文字样式 替换硬编码的字体样式。 在这种情况下,我将使用"caption"。

    完成这些更改后, 文字大小现在可以动态增长了, 但内容现在被截断了。

    要解决这个问题, 用灵活约束替换固定宽度, 让视图按需增长。 在文字视图上, 我将替换固定宽度, 使用参数maxWidth, 并将其设置为infinity。 这告诉SwiftUI为内容 使用尽可能多的宽度。 完成这些更改后, 我的文字视图与大字体完美配合, 并有足够的空间 来显示其内容。 完美! 要在你的App中找到这类 常见问题, 搜索硬编码的文字大小, 并迁移到标准样式。

    在你的App中搜索 硬编码的高度和宽度约束, 并使用灵活约束 让内容增长。 如果你使用UIKit, 方法类似, 但需要额外一步。 用文字样式替换硬编码字体, 并将adjustsFontForContentSizeCategory 设置为true。 这告诉UIKit在偏好设置更改时 自动更新。

    有时仅修复 硬编码的值还不够。 你可能希望根据大字体 调整布局, 同时为默认大小 保留原始布局。

    考虑这个收藏视图。 它包含六张电影海报, 每张下方都有标题。 使用标准文字大小时, 完整标题能舒适地显示 在图片下方的空间中。 启用大字体时, 没有足够的空间 水平显示六个标题。 文字变大时, 这个布局需要进行调整。 以下是该视图的SwiftUI代码。 它呈现了一个水平滚动视图, 带有一个LazyHStack。 在容器内, 我为每个单元格设置了一个按钮。

    要调整这个布局, 我将首先读取dynamicTypeSize 环境键路径。 然后,我将更改单元格上的 columnCount参数, 在containerRelativeFrame修饰符中。

    当启用大字体时, 我将把布局设置为 一次显示4列,而不是6列。

    这提供了更宽的单元格尺寸, 给每个标题更多的增长空间。 为了适应更长的文字, 考虑使用自定义跑马灯策略。

    这是我将在这款App中 调整布局的另一个示例。 我的App的这部分包含 不同类型内容的卡片, 如海滩视频 或露营视频。 这些内容卡片每张 都包含一张图片、 标题和副标题。 使用大字体时,元素之间的 视觉间距不够, 而且文字在其空间内 容易被截断。 一种解决方案是提供 条件布局, 用于开启大字体时。 以下是如何在SwiftUI中 实现条件布局。 首先,读取dynamicTypeSize 环境值, 以检测何时开启了 无障碍字体大小。 然后,创建一个VStackLayout 或HStackLayout, 取决于是否使用了大字体。 AnyLayout让你抽象 这两种类型。 像使用其他堆栈一样 使用新布局。 它将根据文字大小 在水平和垂直之间动态切换, 取决于文字大小。 在UIKit中,使用UIStackView 并更新axis属性, 基于preferredContentSizeCategory。 isAccessibilityCategory。

    调用registerForTraitChanges 并传递UITraitPreferredContentSizeCategory, 以在App运行时响应 大小变化更新布局。

    让我们来看看它在我的App 内容卡片中的实际效果。 开启大字体时, 布局切换为垂直堆栈。 这让标题和副标题能增长到 单元格的整个宽度, 而不是与图片共享宽度。 这种布局还允许单元格变得更高, 以提供更多空间 用于内容显示。

    现在你已准备好在Apple tvOS上 测试具有大字体的App了。 通过使用系统文字样式 发现可以改进的地方, 并调整布局以 优先考虑文字可读性。 以下是你的行动计划。 使用标准文字样式 而不是硬编码字体。

    在启用大字体的情况下 系统性地测试。

    在需要时调整布局 以获得最佳体验。 并标注对大字体的支持, 在你App的Apple tvOS 无障碍营养标签中。

    现在轮到你让你的Apple tvOS App 对所有人都无障碍了!

    • 4:58 - Adopt standard text styles

      // Adopt standard text styles
      
      VStack(spacing: 20) {
        Text("Signup information")
          .font(.caption.bold())
          .lineLimit(1)
          .foregroundStyle(.secondary)
          .frame(width: 300, alignment: .leading)
        HStack(alignment: .top, spacing: 40) { 
            //* ... *//
        }
      }
    • 5:10 - Use flexible constraints

      // Adopt standard text styles
      
      VStack(spacing: 20) {
        Text("Signup information")
          .font(.caption.bold())
          .lineLimit(1)
          .foregroundStyle(.secondary)
          .frame(maxWidth: .infinity, alignment: .leading)
        HStack(alignment: .top, spacing: 40) { 
            /* ... */
        }
      }
    • 5:55 - Dynamic Type with text styles in UIKit

      // Hard coded text size in UIKit
      
      titleLabel.font = UIFont.boldSystemFont(ofSize: 28)
      
      // Dynamic Type with text styles in UIKit
      
      titleLabel.font = UIFont.preferredFont(forTextStyle: .headline)
      titleLabel.adjustsFontForContentSizeCategory = true
    • 7:09 - Adapt layout in response to dynamic type

      // A view that shows a collection of movie posters
      
      struct MovieShelf: View {
        @Environment(\.dynamicTypeSize) private var dynamicTypeSize
        var body: some View {
          ScrollView(.horizontal) {
            LazyHStack(spacing: 40) {
              ForEach(Asset.allCases) { asset in
                Button { 
                  /* ... */
                } label: {
                  asset.portraitImage
                  Text(asset.title)
                }
                .containerRelativeFrame(
                  .horizontal,
                  count: dynamicTypeSize.isAccessibilitySize ? 4 : 6,
                  spacing: 40)
              }
            }
          }
        }
      }
    • 8:07 - Provide a conditional layout for when larger sizes are turned on

      // A view that shows content in a card
      
      struct CardContentView: View {
        @Environment(\.dynamicTypeSize) private var dynamicTypeSize
        var asset: Asset
      
        var body: some View {
          let layout = dynamicTypeSize.isAccessibilitySize ?
            AnyLayout(VStackLayout(alignment: .leading, spacing: 10)) :
            AnyLayout(HStackLayout(alignment: .top, spacing: 10))
          layout {
            /* ... */
          }
        }
      }
    • 8:31 - UIKit adaptive layout that responds to content size changes

      // UIKit adaptive layout that responds to content size changes
      
      class AdaptiveLayoutViewController: UIViewController {
        let stackView = UIStackView()
        
        override func viewDidLoad() {
          super.viewDidLoad()
          updateLayout()
      
          let sizeTraits: [UITrait] = [UITraitPreferredContentSizeCategory.self]
          registerForTraitChanges(sizeTraits, action: #selector(updateLayout))
        }
      
        private func updateLayout() {
          if traitCollection.preferredContentSizeCategory.isAccessibilityCategory {
            stackView.axis = .vertical
          } else {
            stackView.axis = .horizontal
          }
        }
      
      }
    • 0:01 - Introduction
    • Large Text support is now available system-wide on tvOS 27, allowing apps to automatically scale text to match someone's needs and preferences. By supporting Dynamic Type, your app can adapt its layout and display its accessibility support in its Accessibility Nutrition Labels.

    • 2:46 - Identify common issues
    • When accommodating larger text, avoid fixed font sizes and rigid constraints that prevent text from scaling and cause truncation or clipping. Ensure all UI elements are flexible and responsive rather than relying on hardcoded values that break layouts at larger sizes.

    • 6:13 - Adapt your layout
    • Find and replace hardcoded sizes with standard text styles to allow interfaces to grow. In cases where standard scaling isn't enough, adapt your view's layout dynamically—such as reducing the number of columns in a grid—by checking the current `dynamicTypeSize` environment value.

Developer Footer

  • 视频
  • WWDC26
  • 针对动态字体准备好你的 Apple tvOS App
  • 打开菜单 关闭菜单
    • iOS
    • iPadOS
    • macOS
    • Apple tvOS
    • visionOS
    • watchOS
    打开菜单 关闭菜单
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    打开菜单 关闭菜单
    • 辅助功能
    • 配件
    • Apple 智能
    • App 扩展
    • App Store
    • 音频与视频 (英文)
    • 增强现实
    • 设计
    • 分发
    • 教育
    • 字体 (英文)
    • 游戏
    • 健康与健身
    • App 内购买项目
    • 本地化
    • 地图与位置
    • 机器学习与 AI
    • 开源资源 (英文)
    • 安全性
    • Safari 浏览器与网页 (英文)
    打开菜单 关闭菜单
    • 完整文档 (英文)
    • 部分主题文档 (简体中文)
    • 教程
    • 下载
    • 论坛 (英文)
    • 视频
    打开菜单 关闭菜单
    • 支持文档
    • 联系我们
    • 错误报告
    • 系统状态 (英文)
    打开菜单 关闭菜单
    • Apple 开发者
    • App Store Connect
    • 证书、标识符和描述文件 (英文)
    • 反馈助理
    打开菜单 关闭菜单
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program (英文)
    • Mini Apps Partner Program
    • News Partner Program (英文)
    • Video Partner Program (英文)
    • 安全赏金计划 (英文)
    • Security Research Device Program (英文)
    打开菜单 关闭菜单
    • 与 Apple 会面交流
    • Apple Developer Center
    • App Store 大奖 (英文)
    • Apple 设计大奖
    • Apple Developer Academies (英文)
    • WWDC
    阅读最近新闻。
    获取 Apple Developer App。
    版权所有 © 2026 Apple Inc. 保留所有权利。
    使用条款 隐私政策 协议和准则