sin*_*o12 9 ios swiftui dynamic-type-feature
在 UIKit 中,我可以像这样更改 UILabel 的字体大小以支持使用系统字体的动态类型:
UIFontMetrics.default.scaledFont(for: UIFont.systemFont(ofSize: 16))
Run Code Online (Sandbox Code Playgroud)
我错了还是没有办法在 SwiftUI 中做这样的事情?如果我想使用系统字体但也支持动态类型,我可以只使用默认字体样式 .title 等吗?
这个来自 HackingWithSwift 的解决方案似乎只适用于自定义字体,对吗?
在此先感谢您的任何建议!
以下方法有效(使用 Xcode 11.2.1 / iOS 13.2.2 测试)
var body: some View {
Text("Hello, World!") // direct text .font
.font(Font.system(size: UIFontMetrics.default.scaledValue(for: 16)))
}
Run Code Online (Sandbox Code Playgroud)
以及基于视图的修改器
VStack {
Text("Hello, World!")
}
.font(Font.system(size: UIFontMetrics.default.scaledValue(for: 16)))
Run Code Online (Sandbox Code Playgroud)
只要你有
@Environment(\.sizeCategory) var sizeCategory
Run Code Online (Sandbox Code Playgroud)
.font(Font.system(size: UIFontMetrics.default.scaledValue(for: 16)))当系统字体大小发生变化时,加载的文件层次结构中的某个位置也会发生变化。
上面发布的视图修饰符 @Mokkun 可以工作,因为它包含环境变量sizeCategory。
sizeCategory如果您将环境变量放在任何 SwiftUI 视图的顶部,然后直接使用,它也会起作用UIFontMetrics.default.scaledValue(...)。像这样:
import SwiftUI
struct ContentViewSheet: View {
@Environment(\.sizeCategory) var sizeCategory
var body: some View {
Text("Hello world")
.font(Font.system(size: UIFontMetrics.default.scaledValue(for: 16)))
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2038 次 |
| 最近记录: |