SwiftUI环境变量Dynamic Type Size动态类型大小
SwiftUI环境变量Dynamic Type Size动态类型大小

SwiftUI环境变量Dynamic Type Size动态类型大小

在 SwiftUI 中,使用 @Environment(\.dynamicTypeSize) 可以通过环境变量访问用户当前系统设置的 动态类型大小 (Dynamic Type Size)

@Environment(\.dynamicTypeSize) var dynamicTypeSize

DynamicTypeSize 的用途

可以通过 dynamicTypeSize 实现基于用户的文本大小设置来调整视图行为,例如:

根据字体大小动态调整布局。

提供更好的辅助功能支持。

限制某些组件支持的字体范围。

示例

动态调整视图布局

import SwiftUI

struct ContentView: View {
    @Environment(\.dynamicTypeSize) var dynamicTypeSize

    var body: some View {
        VStack {
            Text("Hello, Dynamic Type!")
                .font(.title)

            if dynamicTypeSize.isAccessibilitySize {
                Text("You're using an accessibility size!")
                    .foregroundColor(.green)
            } else {
                Text("You're using a standard size!")
                    .foregroundColor(.blue)
            }
        }
        .padding()
    }
}

dynamicTypeSize.isAccessibilitySize:

一个属性,用于检查用户是否选择了辅助功能级别的文本大小(例如 .accessibility1 或更大)。

调整布局响应文本大小

import SwiftUI

struct ContentView: View {
    @Environment(\.dynamicTypeSize) var dynamicTypeSize

    var body: some View {
        VStack {
            if dynamicTypeSize >= .accessibility3 {
                Text("Large Text Layout")
                    .font(.headline)
            } else {
                Text("Compact Layout")
                    .font(.subheadline)
            }
        }
        .padding()
    }
}

比较动态文本大小:

通过 dynamicTypeSize >= .accessibility3,可以判断当前文本是否处于较大的辅助功能尺寸。

动态类型相关的属性和方法

DynamicTypeSize 枚举

它有以下值:

.xSmall, .small, .medium, .large, .xLarge, .xxLarge, .xxxLarge,
.accessibility1, .accessibility2, .accessibility3, .accessibility4, .accessibility5

这些值按照从最小到最大的字体大小顺序排列。分为两类:

1、标准尺寸(Standard Sizes)

2、辅助功能尺寸(Accessibility Sizes)

标准尺寸

.xSmall: 极小文本尺寸。

.small: 小文本尺寸。

.medium: 默认文本尺寸(系统默认值)。

.large: 稍大文本尺寸。

.xLarge: 更大文本尺寸。

.xxLarge: 非常大的文本尺寸。

.xxxLarge: 超大文本尺寸。

辅助功能尺寸

.accessibility1: 较小的辅助功能文本尺寸。

.accessibility2: 中等辅助功能文本尺寸。

.accessibility3: 大辅助功能文本尺寸。

.accessibility4: 非常大的辅助功能文本尺寸。

.accessibility5: 最大的辅助功能文本尺寸。

辅助功能尺寸适用于需要更大字体的用户,例如视力受限的用户。这些尺寸超出了标准范围。

方法和属性

1、isAccessibilitySize

检查是否属于辅助功能大小。

if dynamicTypeSize.isAccessibilitySize {
    // Do something for accessibility sizes
}

2、比较大小

DynamicTypeSize 遵循 Comparable 协议,因此可以直接比较大小:

if dynamicTypeSize >= .large {
    // Do something for larger text sizes
}

与 dynamicTypeSize(_:) 修饰符的区别

@Environment(\.dynamicTypeSize):

允许视图读取当前的动态类型设置。

dynamicTypeSize(_:):

修饰符,用于限制某个视图的支持范围。

例如:

Text("Hello, World!")
    .dynamicTypeSize(.medium ... .xxLarge)

通过 @Environment(\.dynamicTypeSize),可以让应用根据用户的字体设置动态调整内容和布局,提供更好的用户体验。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注