天天看點

如何在iOS應用中使用自定義字型

最近的項目需求需要使用新的字型,而且是在 所有地方 也就是說不管是普通的cell中的label,還是導航欄中的标題,都要使用設計新給出的字型。而新的字型包含在一個ttf的檔案中。

乍一聽到是挺浩大的一個工程,如果我是一個笨蛋的話估計會去每一個顯示文字的界面,去修改相應的設定Font的方法,再稍微聰明一點可能在一個統一的地方編寫一個比如

- (UIFont *)customFontWithSize:(CGFloat)size

的方法,然後在需要的地方進行使用。這樣的話呢,既浪費時間,又有可能會有遺漏的地方。

不過作為一個碼(lan)工(ren) ,怎麼可能讓自己陷入那樣的人民戰争的汪洋大海呢?是以我使用了蘋果提供的Category特性,來減少自己的工作量。

把大象放冰箱。。啊不不不,要實作category來自定義字型,分成幾步?且聽我來分解。

  • 步驟一:在XCode建立檔案時選擇Category選項,并且建立關于UIFont的新Category,命名就叫UIFont+SGCustom吧。(SG沒有任何的意思,可以是你們工程自己的字首,這裡的SG是“帥哥”的縮寫XD)
  • 步驟二:在建立立的Category的.m檔案中,重寫系統的+(UIFont *)systemFontWithSize:(CGFloat)size方法

    相信你一定知道你的新字型的名稱,是以你應該按這個方法來重新這個方法

+ (UIFont *)systemFontOfSize:(CGFloat)fontSize {

    return [UIFont fontWithName:@"YourFont" size:fontSize];
}
           

等等 ,有警告!你是程式員你還在乎警告? 哈哈,開玩笑,當然如果你覺得這個警告很煩人或者有警告潔癖的話可以使用這段宏來忽略該警告:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
  // 在這裡寫入剛才那段代碼,或者你想忽略警告的代碼

#pragma clang diagnostic pop
           
  • 步驟三:重新運作你的程式,檢視你所有的顯示文字的界面。這時候你應該發現大部分的界面已經替換為你的新字型了。如果有一些地方還沒有的話,請看看這些地方在設定字型的時候是否使用了剛才被重寫的那個方法

寫到這裡我覺得大多數人都已經知道怎麼弄了吧?等等,這位同學你說什麼?哦,你不知道怎麼引用ttf檔案進工程啊?那個。。咳咳,好吧,我順便說一下怎麼把UI給出的新字型放進工程裡。

還是那個按照大象放冰箱的思路來吧

  • 步驟一:像是把圖檔或音頻資源加入工程那樣将其放進工程中
  • 步驟二:在plist裡增加“Fonts provided by application”這個key ,并且增加item0,item0的值為你加進來的那個檔案的名稱。(這裡我想預警一下,一會我們要使用的字型的名稱可不一定是這個檔案的名稱哦)

    如圖所示:

    如何在iOS應用中使用自定義字型
  • 步驟三:找到字型的名稱。如果你不知道新給出的字型的英文!英文!英文!重要的事情說三遍!英文名稱的話,你就要通過如下這段代碼進行尋找了。
for (NSString* family in [UIFont familyNames])
{
    NSLog(@"%@", family);

    for (NSString* name in [UIFont fontNamesForFamilyName: family])
    {
        NSLog(@"  %@", name);
    }
}
           

把所有的你的工程所支援的字型都列印出來,看哪個 更(bu)像(shun)是(yan) 新給出字型,那麼把它的名稱放到剛才的那個方法中就可以啦!~

好了, 快去試試吧~