gpt4 book ai didi

ios - SwiftUI 不会显示自定义字体

转载 作者:行者123 更新时间:2023-11-28 13:22:46 28 4
gpt4 key购买 nike

我目前正在尝试将自定义字体添加到我的项目中,但不知何故无法工作。

我已经将 .otf 文件添加到字体文件夹,检查它是否针对我的项目并将 Fonts provided by application 添加到 Info.plist。

struct ContentView: View {
var body: some View {
Text("CLOSEST")
.foregroundColor(Color("primary"))
.font(Font.custom("HelveticaNowDisplayBold", size: 60))
}
}

最佳答案

如果您确定 Info.plist 使用了正确的文件名:

enter image description here

Note if you are using Xcode 13 you may not have an Info.plist where you expect. This SO answer explains where you can find it.

该字体在应用的目标中可用。

enter image description here

您还需要确保通过正确的名称访问字体。

检查字体名称的一种简单方法是在 return true 之前的 didFinishLaunchingWithOptions 中将以下内容添加到您的 AppDelegate。或者,如果您正在使用新的 SwiftUI 生命周期,您可以将其添加到 .onAppear

for family in UIFont.familyNames.sorted() {
let names = UIFont.fontNames(forFamilyName: family)
print("Family: \(family) Font names: \(names)")
}

这将按系列和名称列出所有字体。

请记住在使用完后将其删除,因为您不需要不必要地打印到控制台。

当我为我的字体执行此操作时(我添加了与您相同的字体),我在可用字体列表的控制台中找到以下内容(请参见上面的屏幕截图):

Family: Helvetica Now Display Font names: ["HelveticaNowDisplay-Bold"]

您的字体名称可能与我的不同,重要的是要注意字体名称可能与文件名不同。这让很多人感到困惑,因为他们在需要使用字体名称时尝试使用文件名。

以下测试代码产生:

struct ContentView: View {
var body: some View {
Text("Hello")
.foregroundColor(.blue)
.font(Font.custom("HelveticaNowDisplay-Bold", size: 60))
}
}

enter image description here

有关添加自定义字体的更多信息,请参阅 Apple 的 documentation .


SwiftUI 中的动态类型

如果您使用的是自定义字体,那么您应该考虑对其进行设置,使其随动态类型缩放。

iOS 14

iOS 14 引入了一个新的修饰符,允许您相对于动态字体类型缩放字体。

Text("Hello")
.font(.custom("HelveticaNowDisplay-Bold", size: 60, relativeTo: .body))

iOS 13

如果您使用的是 iOS 13,则需要付出更多努力才能获得相同的效果。

您首先需要创建一个 ViewModifier。此 View 修饰符从环境中监听尺寸类别(它实际上并不使用它,但将其放在此处可确保在更新尺寸类别时更新 View 修饰符)。

struct ScaledFont: ViewModifier {
@Environment(\.sizeCategory) var sizeCategory
var name: String
var size: CGFloat

func body(content: Content) -> some View {
let scaledSize = UIFontMetrics.default.scaledValue(for: size)
return content.font(.custom(name, size: scaledSize))
}
}

extension View {
func scaledFont(name: String, size: CGFloat) -> some View {
return self.modifier(ScaledFont(name: name, size: size))
}
}

然后按以下方式使用:

Text("Hello")
.scaledFont(name: "HelveticaNowDisplay-Bold", size: 60)

要获得真正好的文章,请查看 Hacking With Swift 上的这篇文章.

关于ios - SwiftUI 不会显示自定义字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58864731/

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