【问题标题】:Does SwiftUI support alternate layouts by preferred font size?SwiftUI 是否支持按首选字体大小的替代布局?
【发布时间】:2020-02-02 05:32:37
【问题描述】:

理想情况下,iOS 应用使用符合用户系统范围字体大小设置的字体大小。该主题在 2017 年的 WWDC 演讲中进行了介绍,该演讲名为使用动态类型构建应用程序

在简单的情况下,您可以使用bodycaption1title 等命名样式设置UIView 的字体,这些样式的大小取决于用户的设置。

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

对于这种情况,WWDC 演讲显示了一些类似这样的代码:

if traitCollection.preferredContentSizeCategory > .extraExtraLarge {
    NSLayoutConstraint.deactivate( horizontalConstraints )
    NSLayoutConstraint.activate( verticalConstraints )
} else {
    NSLayoutConstraint.deactivate( verticalConstraints )
    NSLayoutConstraint.activate( horizontalConstraints )
}

在 SwiftUI 中与 this 等价的是什么?

【问题讨论】:

    标签: fonts accessibility swiftui dynamic-type-feature


    【解决方案1】:

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

    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")
                    }
                }
            }
        }
    
    }
    

    Environment 中获取ContentSizeCategory 并根据值调整视图。

    【讨论】:

    • 谢谢。似乎ContentSizeCategory 应该有比较运算符(<<= 等)和isAccessibilityCategory,如UIContentSizeCategory。我提交了反馈以请求他们。
    猜你喜欢
    • 2011-10-26
    • 2012-08-06
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2011-06-16
    • 2012-07-15
    相关资源
    最近更新 更多