2017-10-06 108 views
2

TL; DR:自定義字體在使用Storyboard/xib之前無法以編程方式使用。自定義字體錯誤

注意:我已經簽出this,試過了答案,他們沒有工作。我也確定他們是目標會員。

我注意到一個奇怪的錯誤而改變分段控制標題自定義字體:

segmentedControl.titleTextAttributes = NSDictionary(objects: [UIFont.init(name: "Comfortaa-Regular", 
                      size: UIFont.systemFontSize)!, 
                   UIColor.white], 
                forKeys: [NSAttributedStringKey.font as NSCopying, 
                   NSAttributedStringKey.foregroundColor as NSCopying]) as? [AnyHashable : Any] 

它找不到字體,那麼解包失敗。但是字體可以在故事板中看到。

FontList

它正確地添加到項目中,這裏的CopyBundle和InfoList:

CopyBundleResources

InfoPlist

所以這裏的漁獲;如果我的故事板中使用它,它顯示在字體系列:

ComfortaaBold

但如果不是,它不顯示,尤其是圓形我已經改變了光線和大膽有disappeared-,而不能以編程方式使用。

ComfortaaLight

我使用的Xcode 9.0版(9A235)和斯威夫特4.我還檢查OpenRadar,找不到對此提交。

所提到的字體:Comfortaa

回答

1

我有同樣的問題。我無法以編程方式添加完全相同的字體系列(Comfortaa) - 每當它崩潰時,但是一旦我在啓動畫面中添加標籤並將字體設置爲Comfotaa-Bold,從代碼加載的字體工作正常並且不會崩潰。所以我的解決方案是在啓動畫面中添加3個標籤,包括 - Comfortaa Bold,Comfortaa Regular,Comfortaa Light等字體,並設置「隱藏」標誌爲真。這樣我就能夠以編程方式使用它們。

+0

我以同樣的方式走了,目前有10多個標籤需要在Storyboard中使用,但現在已足夠。 – EDUsta

1

@EDUsta,我只是試圖與給定的字體及其工作正常,在它沒有問題,讓我跟着步驟:

  1. 添加Comfortaa-Bold.ttfComfortaa-Light.ttfComfortaa-Regular.ttf字體文件到項目。

enter image description here

2.增加字體的條目info.plist文件

enter image description here

確保項目目標添加的字體。

它後,塗抹於UILabelUISegmentedControl使用Swift代碼的字體給出如下:

let fontFirst = UIFont(name: "Comfortaa-Bold", size: 16.0)! 
    segmentFont.setTitleTextAttributes([NSAttributedStringKey.font : fontFirst, NSAttributedStringKey.foregroundColor : UIColor.red], 
             for: .normal) 

    labelBold.font = UIFont(name: "Comfortaa-Bold", size: 16.0) 
    labelLight.font = UIFont(name: "Comfortaa-Light", size: 16.0) 
    labelRegular.font = UIFont(name: "Comfortaa-Regular", size: 16.0) 

工作完美,您就可以在下面的截圖圖片:

enter image description here

爲了您的參考我添加完整的項目here:

+0

我已經意識到,應用程序項目提供的字體需要他們對您提供的項目的擴展! 所以它現在已經修復了,但是我仍然好奇它在將它們添加到故事板後的工作原理... – EDUsta

+0

@EDUsta info.plist包含我們提供給App的字體文件列表,如果我們添加字體文件字體名稱類似於「Comfortaa-Bold.ttf」,但是在info.plist文件中沒有指定相同的字體,那麼它不能通過編程方式加載相同的字體,但是使用IB我們通過文件名添加到目標字體這種方式不需要在info.plist文件中指定列表。 – Rocky