SwiftUI 是否支持按首选字体大小替换布局?

Rob*_*b N 1 fonts accessibility swiftui dynamic-type-feature

理想情况下,iOS 应用程序使用的字体大小遵循用户系统范围的字体大小设置。2017 年的 WWDC 演讲“使用动态类型构建应用程序”涵盖了该主题。

在简单的情况下,您可以UIView使用命名样式(如body, caption1, )设置 的字体title,其大小根据用户的设置而变化。

在更棘手的情况下,您需要为不同的字体大小编写不同的自动布局约束。例如,当字体较大时,水平堆叠的标签可能需要变为垂直堆叠。

在此输入图像描述

在此输入图像描述

对于这种情况,WWDC 演讲展示了如下代码:

if traitCollection.preferredContentSizeCategory > .extraExtraLarge {
    NSLayoutConstraint.deactivate( horizontalConstraints )
    NSLayoutConstraint.activate( verticalConstraints )
} else {
    NSLayoutConstraint.deactivate( verticalConstraints )
    NSLayoutConstraint.activate( horizontalConstraints )
}
Run Code Online (Sandbox Code Playgroud)

SwiftUI 中与此等效的是什么?

LuL*_*aGa 6

我能想到的最接近的是这样的:

struct ContentView: View {

    @Environment(\.sizeCategory) var sizeCategory: ContentSizeCategory

    let largeSizeCategories: [ContentSizeCategory] = [.extraExtraLarge,
                                                      .extraExtraExtraLarge,
                                                      .accessibilityMedium,
                                                      .accessibilityLarge,
                                                      .accessibilityExtraLarge,
                                                      .accessibilityExtraExtraLarge,
                                                      .accessibilityExtraExtraExtraLarge]

    var body: some View {
        Group {
            if largeSizeCategories.contains(sizeCategory) {
                VStack {
                    Text("Pizza, bananas, donuts")
                    Text("Io, Europa, Ganymede")
                }
            } else {
                HStack {
                    Text("Pizza, bananas, donuts")
                    Text("Io, Europa, Ganymede")
                }
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

ContentSizeCategory从 获取并Environment根据值调整您的视图。