ios11- UIFont返回零

时间:2017-10-09 05:02:53

标签: ios swift

我正在使用UIFont更改我的应用中的默认字体。代码在iOS 10及更低版本上工作正常,但它在iOS 11上返回nil,没有任何改变。我正在使用swift 4

这是我的代码,返回nil:

UIFont(name: "AIranianSans", size: 20)
你可以帮帮我吗?怎么了 ?

3 个答案:

答案 0 :(得分:7)

它看起来像一个自定义字体,您必须在XCode中添加为资源。当您通过拖放包含资源时,XCode 9存在一个未向目标添加资源的已知问题。

在文件检查器中检查.ttf文件的目标成员资格。enter image description here

答案 1 :(得分:6)

尝试检查可用的字体

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

可能是字体拼写不同。

答案 2 :(得分: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)

public static func registerFontWithFilenameString(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: Using custom fonts inside Dynamic framework