我目前正在尝试向我的项目添加自定义字体,但不知何故无法工作。
我已经将 .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))
}
}
Run Code Online (Sandbox Code Playgroud)
And*_*rew 25
如果您确定Info.plist使用了正确的文件名
并且字体在应用程序的目标中可用。
您还需要确保以正确的名称访问字体。
检查字体名称的一种简单方法是将以下内容添加到您的 AppDelegatedidFinishLaunchingWithOptions之前的return true. 或者,如果您正在使用新的 SwiftUI 生命周期,则可以将其添加到.onAppear.
for family in UIFont.familyNames.sorted() {
let names = UIFont.fontNames(forFamilyName: family)
print("Family: \(family) Font names: \(names)")
}
Run Code Online (Sandbox Code Playgroud)
这将按系列和名称列出所有字体。
请记住在使用完后将其删除,因为您不需要不必要地打印到控制台。
当我为我的字体做这件事时(我添加了与你相同的字体),我在控制台的可用字体列表中找到了以下内容(参见上面的屏幕截图):
Family: Helvetica Now Display Font names: ["HelveticaNowDisplay-Bold"]
Run Code Online (Sandbox Code Playgroud)
您的字体可能与我的名称不同,请务必注意字体名称可能与文件名不同。这是很多人绊倒的原因,因为他们在需要使用字体名称时尝试使用文件名。
以下测试代码产生:
struct ContentView: View {
var body: some View {
Text("Hello")
.foregroundColor(.blue)
.font(Font.custom("HelveticaNowDisplay-Bold", size: 60))
}
}
Run Code Online (Sandbox Code Playgroud)
有关添加自定义字体的更多信息,请参阅 Apple 的文档。
如果您使用的是自定义字体,那么您应该考虑设置它,以便它可以随动态类型缩放。
iOS 14 引入了一个新的修饰符,允许您相对于动态字体类型缩放字体。
Text("Hello")
.font(.custom("HelveticaNowDisplay-Bold", size: 60, relativeTo: .body))
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 iOS 13,则需要付出更多努力才能获得相同的效果。
您首先需要创建一个 ViewModifier。这个视图修改器从环境中侦听大小类别(它实际上并不使用它,但在此处使用它可确保在更新大小类别时更新视图修改器)。
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))
}
}
Run Code Online (Sandbox Code Playgroud)
然后按以下方式使用它:
Text("Hello")
.scaledFont(name: "HelveticaNowDisplay-Bold", size: 60)
Run Code Online (Sandbox Code Playgroud)
要想写得很好,请查看这篇关于Hacking With Swift 的文章。
对于那些不再有应用程序/场景委托的人来说,可以将其放入。在您的 <Your_App_Name>App.swift 文件中
init() {
for family in UIFont.familyNames.sorted() {
let names = UIFont.fontNames(forFamilyName: family)
print("Family: \(family) Font names: \(names)")
}
}
Run Code Online (Sandbox Code Playgroud)
将工作
| 归档时间: |
|
| 查看次数: |
5780 次 |
| 最近记录: |