一文讓你完全瞭解iOS字體相關知識

做者:董鉑然 受權本站轉載。html

寫本文的契機主要是把本身整理的關於iOS字體方面的知識不斷更新寫在這篇博文中,用來本身之後查閱。git

1、iOS原生字體展現github

在 label中選擇字體的font,並把font由system改爲custom後,就能在family中看到72種特殊字體。這些裏面就有很炫的字體,但 是所有是隻針對英文數字,對中文無效。寫了一個程序把全部的原生樣式遍歷出來展現能夠達到以下效果。能夠清楚地看到每一個字體對應的樣式,不用再一個個試 了。 若是你不是在董鉑然博客園看到本文,請點擊查看原文。windows

blob.png

blob.png

blob.png

一 共是72種樣式,我這個demo程序有兩種展現方法,簡潔展現和詳細展現,簡潔展現中只會把每一個family的第一個font拿出來展現。最後一張圖是詳 細展現界面的。分了group展現,每一個section對應一個family。能夠看出蘋果的原生字體仍是有不少美觀的字體,只是都僅對英文支持。微信

相信如今大部分的軟件大部分的項目都是這麼寫代碼的:app

label.font = [UIFont systemFontOfSize:14];

若是不想用默認系統字體則須要使用此方法賦值:框架

UIFont *font = [UIFont fontWithName:@"Georgia" size:14];

這裏傳進Name裏的參數是familyName而不是fontName。iphone

2、獲取family名稱ide

那麼如何獲取這個family的名稱?佈局

方法1:在storyboard中或是xib中用label的圖形化界面選中一個本身喜歡的樣式,而後把名稱記下寫到代碼中。

方法2:上面就有啊,從上面5張圖中選吧。

方法3:(推薦)遍歷

在UIFont類中有這些關於家族名和字體名的開放API,經過這些能夠清晰的寫個遍歷打印,查看全部的familyName和其中包含的fontName

int i = 0;
for(NSString *fontfamilyname in [UIFont familyNames])
{
    NSLog(@"family:'%@'",fontfamilyname);
    for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname])
    {
        NSLog(@"\tfont:'%@'",fontName);
    }
    NSLog(@"-------------%d",i++);
}

使用上面的代碼便可遍歷打印出全部的名稱,而後從打印中複製名稱到代碼中我的感受更爲科學。

3、外界字體引入項目

本人親測,在網上不論是windows字體,仍是Android字體只要是ttf格式的,通常iOS程序都支持內嵌。

具體步驟也很簡單:

1.將ttf文件拖入項目中

blob.png

2.修改plist文件,加入Fonts provided by application 配置,後面填上拖進來的項目名

blob.png

3.就能夠在圖形化界面看到新的字體選擇了

blob.png

4.若是不想從IB界面找,建議使用一下上面的遍歷打印,能夠用循環打印數量來最直接的看是否導入成功,並找到本身須要的內容。

blob.png

5.運行項目獲得本身想要的結果

blob.png

4、動態字體

動 態字體-Dynamic Type源於iOS7引入的一個文本渲染框架TextKit。主要的做用就是能夠系統自設大小。當下的蘋果已經作了愈來愈多的人性化的處理,甚至連盲人模 式都有。對於字體的展現也是考慮到了各人的喜愛,有的人喜歡看大字,有的人喜歡看小字。在動態字體出來以前,有的應用也考慮到了此用戶體驗,好比網易新聞 之前就有可以在應用中設置偏好的字體大小功能。蘋果也整合到了整個手機中,動態字體的思想就是:在setting中設置字體大小,不僅僅系統的字體會變,連應用程序中的字體大小也會隨之改變。前提是你應用程序中的字體的代碼寫的符合要求。 

blob.png

前面的文章大部分說的都是要在字體中選custom,這時要考慮動態字體就有選 Text Styles中的選項了。

  • UIFontTextStyleHeadline

  • UIFontTextStyleBody

  • UIFontTextStyleSubheadline

  • UIFontTextStyleFootnote

  • UIFontTextStyleCaption1

  • UIFontTextStyleCaption2

這 些樣式顧名思義,就不每一個都列出顯示效果了。標題,子標題,正文等等都是一些比較樸素。 我感受這也就至關於word中的「樣式」,把本身的每一個章節的標題子標題選中設置成標題一或者標題二 而後就能用word的自動生成目錄功能,而且一改某個樣式裏詳細設置,每一個標題子標題的格式也都會隨之改變。 這裏就是若是你在代碼中把字體用這些樣式,那你在手機setting裏設置大小以後應用字體會有所反應。

設置字體的位置是: 設置-》顯示與亮度-》文字大小

blob.png

如上左圖是把尺寸調到了最大後的效果,下面的提示語只有到最大才會顯示。 我試了下QQ裏的字體設置的都是動態字體,微信和支付寶暫時還不支持動態大小,在字體尺寸設置很大後微信支付寶沒反應,QQ則響應改變。上面右圖是在iphone6上截到QQ客戶端的展現效果。

設置動態字體的代碼實現以下:

UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];

項目中建議把動態字體和自動佈局結合起來用,以防止字體設置改變後出現錯位Bug。 

5、字體描述符

字體描述符-UIFontDescriptor  也是TextKit的核心之一,大體意思就是:字體描述符能夠把一個你不知道詳情的font樣式臨時存起來作修改或賦值給別人使用。在使用了上面的動態字體以後,可能你只知道如今的text-Style可是詳細的familyName,fontName都不知道是什麼,這種狀況下若是想修改字體的樣式爲斜體或粗體就只能使用這種方法:

// ------取出當前正文的字體樣式
UIFontDescriptor *bodyFontDesciptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleBody];
// ------把樣式改成斜體
UIFontDescriptor *italicFontDescriptor = [bodyFontDesciptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
// ------賦值給另外一個label。
self.titleLabel.font = [UIFont fontWithDescriptor:italicFontDescriptor size:0.0];

關於樣式一共有四種可選:

  • UIFontDescriptorTraitItalic

  • UIFontDescriptorTraitExpanded

  • UIFontDescriptorTraitCondensed

  • UIFontDescriptorTraitBold

字體描述符還有一個API是經過詳細屬性字典設置一個label的樣式,寫法以下 

UIFontDescriptor *attributeFontDescriptor = [UIFontDescriptor fontDescriptorWithFontAttributes:
    @{UIFontDescriptorFamilyAttribute: @"Avenir Next Condensed",
      UIFontDescriptorNameAttribute:@"AvenirNextCondensed-Italic",
      UIFontDescriptorSizeAttribute: @40.0,
      UIFontDescriptorMatrixAttribute:[NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(M_1_PI*1.5)
      ]}];
label.font = [UIFont fontWithDescriptor:attributeFontDescriptor size:0.0];

這 上面分別設置了家族名,字體名,尺寸,形變,最後的size填0.0就能夠,若是填了一個值,那這個值會把上面字典中的尺寸覆蓋,感受通常狀況下應該不會 有人這麼蛋疼用這種方法建樣式,這個Attribute按command點進去還有不少,大多都是平時用不到的,有興趣的能夠一個一個鑽研,好像一共有十 幾個。

上面這段代碼建立的label會顯示成這樣:

blob.png

6、擴展字體樣式

上面說了原生所有不支持中文,可是咱們用中文的人仍是比較多,中文字體如今在網上搜索結果不少,可是大部分都不是想要的結果,要不就是不會讓你那麼簡單下載的。我整理了一個經常使用的字體樣式包,裏面大體包括:

華文行楷,華文琥珀,華文新魏,隸書 等等這些熟悉的名字

純淨下載地址:http://pan.baidu.com/s/1hqfGdpE   密碼:31qs

除了這些經常使用樣式,還有一些很是規的字體樣式,固然好的字體遇到時我會積累,並整理在下面,不要求多,只要求精。

純淨下載地址:http://pan.baidu.com/s/1i38etV3  密碼:hnv7

blob.png

blob.png

若是有很是推薦的字體也歡迎告訴我 我整理在一塊兒。

若是你不是在董鉑然博客園看到本文,請點擊查看原文

上面說的有個程序能夠看到iOS全部字體的展現樣式,下載地址在:https://github.com/dsxNiubility/SXFontShow

相關文章
相關標籤/搜索