SwiftUI中如何设置字体范围(适配辅助功能字号调整)
在SwiftUI中限制动态字体的字号范围(14-34)
要精确限制辅助功能调整字号时的字体大小范围(14到34号),你可以通过两种方式实现,替代仅靠minimumScaleFactor的方案:
方法一:直接计算并钳制字体大小
通过监听系统动态字体的基准大小,将其钳制在14-34之间,确保无论系统辅助功能怎么调,字体都不会超出这个范围:
struct ContentView: View { @Environment(\.dynamicTypeSize) private var dynamicTypeSize private var clampedFontSize: CGFloat { // 获取系统默认body样式的字体大小 let systemFontSize = UIFont.preferredFont(forTextStyle: .body).pointSize // 钳制到14-34区间 return max(14, min(systemFontSize, 34)) } var body: some View { VStack{ Text("Test string") .font(.system(size: clampedFontSize)) .frame(width: 150, height: 50) } } }
这个方法的优势是精确控制字号数值,完全贴合你要的14-34范围。如果需要对不同文本样式(比如标题、副标题)设置不同范围,只需要修改preferredFont(forTextStyle:)的参数即可。
方法二:限制动态类型的等级范围
如果你更倾向于遵循系统的动态类型等级规范,可以限制允许的动态类型大小区间,对应到近似的字号范围:
struct ContentView: View { var body: some View { VStack{ Text("Test string") // 限制动态类型从最小的xSmall到accessibility3(对应约34号字体) .dynamicTypeSize(.xSmall ... .accessibility3) .font(.body) // 关闭自动缩放,因为已经限制了范围 .minimumScaleFactor(1) .frame(width: 150, height: 50) } } }
这种方法的好处是符合Apple的无障碍设计规范,但字号是对应系统预设的等级,可能不是精确的14-34,你可以根据需求选择。
注意:minimumScaleFactor的作用是当文本容器空间不足时缩放字体,和限制系统动态字体的大小范围是两个不同的需求,所以上面的方案中我们要么直接控制字体大小,要么关闭了自动缩放。
内容的提问来源于stack exchange,提问作者New iOS Dev
相关产品推荐
相关产品推荐

