iOS字體相關(guān)(轉(zhuǎn)載)

一、iOS原生字體展示
在label中選擇字體的font,并把font由system改成custom后,就能在family中看到72種特殊字體。這些里面就有很炫的字體,但是全部是只針對英文數(shù)字,對中文無效。寫了一個程序把所有的原生樣式遍歷出來展示可以達到如下效果??梢郧宄乜吹矫總€字體對應(yīng)的樣式,不用再一個個試了。 如果你不是在董鉑然博客園看到本文,請點擊查看原文。




一共是72種樣式,我這個demo程序有兩種展示方法,簡潔展示和詳細展示,簡潔展示中只會把每個family的第一個font拿出來展示。最后一張圖是詳細展示界面的。分了group展示,每個section對應(yīng)一個family??梢钥闯鎏O果的原生字體還是有很多美觀的字體,只是都僅對英文支持。
相信現(xiàn)在大部分的軟件大部分的項目都是這么寫代碼的:
1

label.font = [UIFont systemFontOfSize:14];

如果不想用默認系統(tǒng)字體則需要使用此方法賦值:
1

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

這里傳進Name里的參數(shù)是familyName而不是fontName。

二、獲取family名稱
那么如何獲取這個family的名稱?
方法1:在storyboard中或是xib中用label的圖形化界面選中一個自己喜歡的樣式,然后把名稱記下寫到代碼中。
方法2:上面就有啊,從上面5張圖中選吧。
方法3:(推薦)遍歷
在UIFont類中有這些關(guān)于家族名和字體名的開放API,通過這些可以清晰的寫個遍歷打印,查看所有的familyName和其中包含的fontName
1
2
3
4
5
6
7
8
9
10

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++);

}

使用上面的代碼即可遍歷打印出所有的名稱,然后從打印中復(fù)制名稱到代碼中個人感覺更為科學。

三、外界字體引入項目
本人親測,在網(wǎng)上不管是windows字體,還是Android字體只要是ttf格式的,一般iOS程序都支持內(nèi)嵌。
具體步驟也很簡單:
1.將ttf文件拖入項目中


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

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

4.如果不想從IB界面找,建議使用一下上面的遍歷打印,可以用循環(huán)打印數(shù)量來最直接的看是否導(dǎo)入成功,并找到自己需要的內(nèi)容。

5.運行項目得到自己想要的結(jié)果

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


前面的文章大部分說的都是要在字體中選custom,這時要考慮動態(tài)字體就有選 Text Styles中的選項了。
UIFontTextStyleHeadlineUIFontTextStyleBodyUIFontTextStyleSubheadlineUIFontTextStyleFootnoteUIFontTextStyleCaption1UIFontTextStyleCaption2
這些樣式顧名思義,就不每個都列出顯示效果了。標題,子標題,正文等等都是一些比較樸素。 我感覺這也就相當于word中的“樣式”,把自己的每個章節(jié)的標題子標題選中設(shè)置成標題一或者標題二 然后就能用word的自動生成目錄功能,并且一改某個樣式里詳細設(shè)置,每個標題子標題的格式也都會隨之改變。 這里就是如果你在代碼中把字體用這些樣式,那你在手機setting里設(shè)置大小之后應(yīng)用字體會有所反應(yīng)。
設(shè)置字體的位置是: 設(shè)置-》顯示與亮度-》文字大小

如上左圖是把尺寸調(diào)到了最大后的效果,下面的提示語只有到最大才會顯示。 我試了下QQ里的字體設(shè)置的都是動態(tài)字體,微信和支付寶暫時還不支持動態(tài)大小,在字體尺寸設(shè)置很大后微信支付寶沒反應(yīng),QQ則響應(yīng)改變。上面右圖是在iphone6上截到QQ客戶端的展示效果。
設(shè)置動態(tài)字體的代碼實現(xiàn)如下:
1

UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];

項目中建議把動態(tài)字體和自動布局結(jié)合起來用,以防止字體設(shè)置改變后出現(xiàn)錯位Bug?!?br>  
五、字體描述符
字體描述符-UIFontDescriptor 也是TextKit的核心之一,大致意思就是:字體描述符可以把一個你不知道詳情的font樣式臨時存起來做修改或賦值給別人使用。在使用了上面的動態(tài)字體之后,可能你只知道現(xiàn)在的text-Style但是詳細的familyName,fontName都不知道是什么,這種情況下如果想修改字體的樣式為斜體或粗體就只能使用這種方法:
1
2
3
4
5
6

// ------取出當前正文的字體樣式

UIFontDescriptor *bodyFontDesciptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleBody];

// ------把樣式改為斜體

UIFontDescriptor *italicFontDescriptor = [bodyFontDesciptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];

// ------賦值給另一個label。

self.titleLabel.font = [UIFont fontWithDescriptor:italicFontDescriptor size:0.0];

關(guān)于樣式一共有四種可選:
UIFontDescriptorTraitItalic
UIFontDescriptorTraitExpanded
UIFontDescriptorTraitCondensed
UIFontDescriptorTraitBold

字體描述符還有一個API是通過詳細屬性字典設(shè)置一個label的樣式,寫法如下
1
2
3
4
5
6
7

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];

這上面分別設(shè)置了家族名,字體名,尺寸,形變,最后的size填0.0就可以,如果填了一個值,那這個值會把上面字典中的尺寸覆蓋,感覺一般情況下應(yīng)該不會有人這么蛋疼用這種方法建樣式,這個Attribute按command點進去還有很多,大多都是平時用不到的,有興趣的可以一個一個鉆研,好像一共有十幾個。
上面這段代碼創(chuàng)建的label會顯示成這樣:


六、擴展字體樣式
上面說了原生全部不支持中文,但是我們用中文的人還是比較多,中文字體現(xiàn)在在網(wǎng)上搜索結(jié)果很多,但是大部分都不是想要的結(jié)果,要不就是不會讓你那么簡單下載的。我整理了一個常用的字體樣式包,里面大致包括:
華文行楷,華文琥珀,華文新魏,隸書 等等這些熟悉的名字
純凈下載地址:http://pan.baidu.com/s/1hqfGdpE 密碼:31qs
除了這些常用樣式,還有一些非常規(guī)的字體樣式,當然好的字體遇到時我會積累,并整理在下面,不要求多,只要求精。
純凈下載地址:http://pan.baidu.com/s/1i38etV3 密碼:hnv7



如果有非常推薦的字體也歡迎告訴我 我整理在一起。
如果你不是在董鉑然博客園看到本文,請點擊查看原文。
上面說的有個程序可以看到iOS所有字體的展示樣式,下載地址在:https://github.com/dsxNiubility/SXFontShow

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 寫本文的契機主要是把自己整理的關(guān)于iOS字體方面的知識不斷更新寫在這篇博文中,用來自己以后查閱。 一、iOS原生字...
    默默_David閱讀 1,508評論 0 3
  • //學習內(nèi)容 /* 1.控件 UIView UILabel UITextField UITextView UIBu...
    Matte閱讀 1,232評論 0 0
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 14,093評論 1 92
  • iOS 字體的那些事兒 iOS原生字體展示 在label中選擇字體的font,并把font由system改成cus...
    comst閱讀 2,527評論 0 2
  • 本文摘自IOS控件學習:UILabel常用屬性與用法 - The important thing in life ...
    nuannuan_nuan閱讀 1,112評論 0 1

友情鏈接更多精彩內(nèi)容