iOS11-字体返回nil。

5

我将使用UIFont来更改我的应用程序中的默认字体。这段代码在iOS 10及以下版本上运行良好,但在iOS 11上返回nil,没有任何变化。我使用Swift 4。

这是返回nil的代码:

UIFont(name: "AIranianSans", size: 20)

你能帮我吗?出了什么问题?

3个回答

8
看起来像是你在XCode中添加的自定义字体资源。XCode 9已知存在一个问题,即当你通过拖放方式添加资源时,不会将资源添加到目标中。
请检查文件检查器中.ttf文件的目标成员资格。enter image description here

8

尝试检查可用字体

for familyName:String in UIFont.familyNames {
    print("Family Name: \(familyName)")
    for fontName:String in UIFont.fontNames(forFamilyName: familyName) {
         print("--Font Name: \(fontName)")
     }
}

可能字体拼写不同。


0

https://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ 按照这里提到的步骤后,我无法在Swift4应用程序中运行时加载字体。只有当我们在故事板中应用特定的自定义字体时,字体才会在运行时出现。然后才能使用此API。

UIFont(name: "font name", size: 20.0) 

如果不返回字体实例,则只会返回 nil。因此,设计时自定义字体可以正常工作,但是运行时不行。

为了在运行时工作,我们需要加载字体。

可以加载任意数量的字体文件。

UIFont.registerFontWithFilenameString(filenameString: "font 1 Sans LF Bold.ttf", bundle: Bundle.main)
        UIFont.registerFontWithFilenameString(filenameString: "font 2Sans LF Light.ttf", bundle: Bundle.main)
        UIFont.registerFontWithFilenameString(filenameString: "font 3Sans LF Regular.ttf", bundle: Bundle.main)
        UIFont.registerFontWithFilenameString(filenameString: "font 4Sans LF Medium.ttf", bundle: Bundle.main)

公共静态函数使用文件名字符串注册字体(filenameString: String, bundle: Bundle) {

    guard let pathForResourceString = bundle.path(forResource: filenameString, ofType: nil) else {
        print("UIFont+:  Failed to register font - path for resource not found.")
        return
    }

    guard let fontData = NSData(contentsOfFile: pathForResourceString) else {
        print("UIFont+:  Failed to register font - font data could not be loaded.")
        return
    }

    guard let dataProvider = CGDataProvider(data: fontData) else {
        print("UIFont+:  Failed to register font - data provider could not be loaded.")
        return
    }

    guard let fontRef = CGFont(dataProvider) else {
        print("UIFont+:  Failed to register font - font could not be loaded.")
        return
    }

    var errorRef: Unmanaged<CFError>? = nil
    if (CTFontManagerRegisterGraphicsFont(fontRef, &errorRef) == false) {
        print("UIFont+:  Failed to register font - register graphics font failed - this font may have already been registered in the main bundle.")
    }

代码被占用 Xcode:在动态框架内使用自定义字体


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接