2017-10-09 62 views
3

我使用UIFont在我的應用程序中更改默認字體。該代碼在iOS 10及更低版本上工作正常,但它在iOS 11上返回nil,沒有任何更改。我使用SWIFT 4ios11- UIFont return nil

這是我的代碼,返回nil:

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

你能幫助我嗎?哪裏不對 ?

回答

5

嘗試檢查可用字體

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

可能是字體拼寫是不同的。

1

它看起來像一個自定義字體,您必須已添加爲XCode中的資源。 XCode 9存在一個已知問題,即當您通過拖放操作包含資源時,不會向目標添加資源。

檢查文件檢查器中.ttf文件的目標成員資格。 enter image description here

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) 

公共靜態FUNC registerFontWithFilenameString(filenameString:字符串,束:束){

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