如何在 SwiftUI 中使用 AttributedString。没有可用于在文本中使用 AttributedString 的 API
我有使用自定义参数定义的字体:
public var suiFont: Font {
.custom(name, size: size)
}
Run Code Online (Sandbox Code Playgroud)
然后我需要使用它们来创建UIKit's UIFont。如何从Font结构体中获取参数?我找到了标准字体的解决方案:
UIFont.preferredFont(forTextStyle: .body).pointSize
UIFont.preferredFont(forTextStyle: .body).fontName
UIFont.preferredFont(forTextStyle: .body).fontDescriptor
Run Code Online (Sandbox Code Playgroud)
但它不适合我的情况,因为我的字体是使用自定义参数创建的。例如Font.custom("SFUI", size: 25)返回尺寸 17。
还有其他方法可以从 SwiftUI Font 获取字体参数吗?标准 SwiftUI 元素如何使用包装的 UIKit 元素来做到这一点?
在我正在开发的应用程序(适用于 iOS13 及更高版本的 SwiftUI)中,我导入了自定义字体,并使用以下方法加载该字体”:
func getDigitalXFontOfSize(size s : CGFloat) -> Font {
return Font.custom("DigitalX", size: s);
}
Run Code Online (Sandbox Code Playgroud)
我在视图中有一个 Text 对象,如下所示:
let font : Font = FontGetter.getDigitalXFontOfSize(20.0);
var body: some View {
HStack {
Text("some text").font(FontGetter)
}
}
Run Code Online (Sandbox Code Playgroud)
在 iOS 中,有一些选项可以在“设置”中更改字体大小,并指出:“支持动态类型的应用程序将在下方调整为您喜欢的阅读大小”。据我所知,SwiftUI 中的 Text 视图会根据 Dynamic Type 值自动采用字体的动态缩放。
现在我明白可访问性非常重要,如果用户想要更大的字体,他们应该能够得到一个等等。我的应用程序是一个网络游戏的附加组件,需要一个非常具体的布局,不遵守非常大或非常小的文本(如 iOS 中可用的文本,例如accessibilityExtraExtraExtraLarge)
一些应用程序,如 iOS 版 Reddit 应用程序,似乎完全忽略了设置应用程序中设置的文本大小。
当您在“设置”应用中更改文本大小滑块时,我的应用中的文本大小也会发生变化,这是我不希望发生的。
我可以在我的应用程序中关闭动态类型支持并始终呈现我指定的确切大小的字体吗?如果是这样,怎么做?
我可以为我在应用程序中使用的特定文本视图禁用动态类型吗?
我花了很多时间在 SO 上搜索类似的问题,但似乎找不到适用于 iOS 13 及更高版本或 SwiftUI 的解决方案。以前版本的 iOS(或 swift)没有缩放以相同方式创建的自定义字体,但现在它们似乎可以。
编辑
在 iOS 14 中,有一个创建固定字体大小的选项,如下所示:
func getDigitalXFontOfSize(size s : CGFloat) -> …Run Code Online (Sandbox Code Playgroud)