gpt4 book ai didi

swift - 在忽略动态类型时修复 SwiftUI iOS 13+ 中自定义字体的大小

转载 作者:行者123 更新时间:2023-12-03 16:58:56 24 4
gpt4 key购买 nike

在我正在开发的应用程序(iOS13 及更高版本的 SwiftUI)中,我导入了自定义字体,并使用以下方法加载字体“:

func getDigitalXFontOfSize(size s : CGFloat) -> Font {
return Font.custom("DigitalX", size: s);
}
我在 View 中有一个 Text 对象,如下所示:
let font : Font = FontGetter.getDigitalXFontOfSize(20.0);

var body: some View {
HStack {
Text("some text").font(FontGetter)
}
}
在 iOS 中,设置中有更改字体大小的选项,它指出:“支持动态类型的应用程序将在下面调整为您喜欢的阅读大小”。据我所知,SwiftUI 中的 Text View 会自动采用基于 Dynamic Type 值的字体动态缩放。
现在我明白可访问性非常重要,如果用户想要更大的字体,他们应该能够得到一个等等。我的应用程序是网络游戏的附加组件,需要一个非常具体的布局,不遵守非常大文本或非常小的文本(如 iOS 中可用的文本,例如 accessibilityExtraExtraExtraLarge )
一些应用程序,例如 iOS 的 Reddit 应用程序,似乎完全忽略了设置应用程序中设置的文本大小。
当您在“设置”应用程序中更改文本大小 slider 时,我的应用程序中的文本大小也会发生变化,这是我不希望发生的。
我可以在我的应用程序中关闭动态类型支持并始终按照我指定的确切大小呈现字体吗?如果是这样,怎么办?
我可以为我在应用程序中使用的特定 TextView 禁用动态类型吗?
我花了很多时间搜索类似的问题,但我似乎无法找到适用于 iOS 13 及更高版本或 SwiftUI 的解决方案。以前版本的 iOS(或 swift)没有缩放以相同方式创建的自定义字体,但现在似乎可以了。
编辑
在 iOS 14 中,可以选择创建固定字体大小,如下所示:
func getDigitalXFontOfSize(size s : CGFloat) -> Font {
return Font.custom("DigitalX", fixedSize: s);
}
这似乎有效。但对于 iOS 13,我也需要类似的东西。

最佳答案

一个小技巧
似乎苹果没有给我们直接的方法来影响动态字体的最大尺寸。
为了避免非常小的字体大小,有 minimumScaleFactor 修饰符,如

.minimumScaleFactor(0.5)
要避免使用非常大的字体,这并不容易。
我在我的应用程序中所做的是获取名为 sizeCategory 的环境变量,并根据此系统变量的值调整我的字体。
它也应该对你有用。在您看来,您将在结构中添加环境变量。那么如果你知道 .accessibilityExtraExtraLarge打破你的布局,你可以像这样调整它:
struct ContentView: View {
@Environment(\.sizeCategory) var sizeCategory

var body: some View {
Text("Hello World")
.font(sizeCategory == .accessibilityExtraExtraLarge ?
.custom("Helvetica", size: 23, relativeTo: .headline) :
.custom("Helvetica", size: 33, relativeTo: .headline))
.minimumScaleFactor(0.5)
}
}
我没有要测试的完整代码,但我会将其添加到您的函数中,它应该可以工作:
func getDigitalXFontOfSize(size s : CGFloat) -> Font {
if font(sizeCategory == .accessibilityExtraExtraLarge {
return Font.custom("DigitalX", size: s - 10)
} else {
return Font.custom("DigitalX", size: s)
}
我希望这会有所帮助。我想在函数中使用 switch 语句也是一个想法!

关于swift - 在忽略动态类型时修复 SwiftUI iOS 13+ 中自定义字体的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63956323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com