我正在为 iOS 应用创建一个框架。它将包含一些标签、按钮、列表……所有这些都作为 SwiftUI 视图,但采用了特殊的设计。在框架中,我添加了一个名为“ContentView”的 SwiftUI 视图,它的目的只是(视觉上)测试画布中的 UI 元素,稍后将删除 ContentView。我想为标签设计添加自定义字体,我知道该怎么做:
但是我的 ContentView 中没有显示自定义字体(我已经在另一个项目 iOS 应用程序中成功尝试过)。没有编译错误或任何警告,可以构建框架并且 ContentView 在画布中很好地呈现。只是字体错误。
我尝试重新启动 Xcode,删除并添加几次字体,但没有奏效。所以这里是我的问题:
感谢您的帮助。
答案 0 :(得分:1)
棘手的小问题,但这对我有用:
在自定义框架中,我创建了一个 FontLoader
类:
public class FontLoader {
static public func loadFont() {
if let fontUrl = Bundle(for: FontLoader.self).url(forResource: "Opus", withExtension: "otf"),
let dataProvider = CGDataProvider(url: fontUrl as CFURL),
let newFont = CGFont(dataProvider) {
var error: Unmanaged<CFError>?
if !CTFontManagerRegisterGraphicsFont(newFont, &error)
{
print("Error loading Font!")
} else {
print("Loaded font")
}
} else {
assertionFailure("Error loading font")
}
}
}
然后,在我的 AppDelegate
的 didFinishLaunchingWithOptions
中,我确保导入我的框架并加载字体:
import FontTestFramework
//...
FontLoader.loadFont()
后来,在我看来,我成功地使用了字体:
Text("Test")
.font(.custom("Opus", size: 30))
我进行了测试,以确保它不仅加载了我 Mac 上安装的版本(因为我使用的是模拟器),而且注释掉了 FontLoader.loadFont()
调用,果然,它默认返回 {{ 1}}
我用 San Francisco
文件尝试了这个,但我认为没有任何理由 otf
应该表现不同。显然,ttf
文件必须是框架目标的一部分。