簡體   English   中英

使用 Swift 向 macOS 應用程序添加自定義字體

[英]Adding a custom font to macOS app using Swift

我遵循了一堆教程,但它不起作用:我只是想向 macOS 應用程序添加自定義字體。

我基本上嘗試過:

  1. .ttf字體文件添加到我的項目中:設置了目標成員資格,並且我還確保使用Bundle Phases內的Copy Files 編譯后我可以看到所有文件都在 Bundle 中。 所以這似乎工作得很好。

在此處輸入圖片說明

  1. Info.plist :我添加Fonts provided by application並為我想要添加的每個字體文件創建了一個項目(像myFont.tff這樣的myFont.tff )。

  2. 我確保我使用了正確的字體名稱 我在我的系統上安裝了字體並使用 Interface Builder 配置了一個標簽,以便它使用所需的字體。 我打印了它的值print(myLabel.font.fontName)

  3. 令人困惑:如果我想添加到應用程序的完全相同的字體文件安裝在系統 Fontbook 中並被激活,則一切正常。 當我停用它時,它不起作用。 對我來說,這表明我使用了正確的字體名稱。

  4. 我找到了ATSApplicationFontsPath並嘗試將它添加到Info.plist ,但既不使用路徑(由文檔推薦)或像. (這似乎對那里的某些人有用)解決了。

在此處輸入圖片說明

感謝任何幫助!

根據以前的答案,我很難讓它發揮作用,所以我決定自己寫一個答案。 這是基於@ixany 和@rob-keniger 之前的回答。

  1. 創建一個名為 Fonts 的文件夾

在此處輸入圖片說明

  1. 將字體添加到Fonts文件夾。 取消選中Add to targetsCopy items if needed選中Copy items if needed

在此處輸入圖片說明

  1. Application fonts resource path添加到 Info.plist 並輸入Fonts

在此處輸入圖片說明

  1. 轉到Build Phases並創建一個New Copy Files Phase

在此處輸入圖片說明

  1. Destinations設置為Resources並將子SubpathFonts 然后將您的字體文件添加到列表中。

在此處輸入圖片說明

我偶然解決了我的問題。

我注意到在捆綁文件中,我的字體被包含兩次:它們被復制到“資源”目錄以及我在“復制文件”構建階段中聲明的子路徑。 我從我的項目中刪除了字體,再次添加了它們(沒有檢查“目標成員資格”)並將它們添加到構建階段中,以便將它們復制到子路徑中。 在那之后它起作用了。

補充說明:

原來, Fonts provided by application是 iOS 唯一的屬性,因此 macOS 實現不需要它。

此外, ATSApplicationFontsPath不需要任何斜杠。 例如: Fonts應該可以正常工作。

我很難找到 .ttf 字體文件的正確名稱,有時還發現了一些奇怪的行為:NSFont 從字體系列中隨機選擇字體(常規、中等、粗體……),而沒有任何代碼更改。 通過使用 .otf 文件,我也可以解決這個問題。

ATSApplicationFontsPath (即Application fonts resource path )是相對於您的應用程序包的Resources文件夾的。

要查看您的字體復制到的位置:

  1. 在 Xcode 中,展開 Project Navigator 下的 Products 部分,然后單擊 Show in Finder

找到應用程序包

  1. 在 Finder 中,按住 Ctrl 鍵單擊您的應用程序,然后單擊“顯示資源內容”。 瀏覽到Resources文件夾並在那里找到您的字體。 在此處輸入圖片說明

在運行 BigSur 的 Xcode 12 beta 1 中,上述所有內容均不適用於我,但這些步驟確實適用。

  1. 為組織創建一個 Fonts 文件夾。
  2. 將您的字體添加到項目中。 請務必檢查 macOS 目標!
  3. 將應用程序字體資源路徑設置為“.” (沒有引號)。

無需編輯構建階段或其他任何內容。

Xcode 12 要添加自定義字體,您必須從提供的字符串中排除擴展名。

IE

.font(.custom("your font name", size:xx)) // 每次都有效

.font(.custom("your font name.extension",size:xx)) // 總是失敗

Xcode 11.xx 並非如此, fontname.extension 正在工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM