寫本文的契機主要是把自己整理的關于iOS字型方面的知識不斷更新寫在這篇博文中,用來自己以後查閱。
一、iOS原生字型展示
在label中選擇字型的font,并把font由system改成custom後,就能在family中看到72種特殊字型。這些裡面就有很炫的字型,但是全部是隻針對英文數字,對中文無效。寫了一個程式把所有的原生樣式周遊出來展示可以達到如下效果。可以清楚地看到每個字型對應的樣式,不用再一個個試了。 如果你不是在董鉑然部落格園看到本文,請點選檢視原文。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL2EDO1EDM1UzM4MTNxMDMvwFOwUTMwIzLclDM4cTM38CX1EDMyc2bsJ2Lc12bj5ycn9Gbi52YuAzcldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
一共是72種樣式,我這個demo程式有兩種展示方法,簡潔展示和詳細展示,簡潔展示中隻會把每個family的第一個font拿出來展示。最後一張圖是詳細展示界面的。分了group展示,每個section對應一個family。可以看出蘋果的原生字型還是有很多美觀的字型,隻是都僅對英文支援。
相信現在大部分的軟體大部分的項目都是這麼寫代碼的:
label.font = [UIFont systemFontOfSize:14];
如果不想用預設系統字型則需要使用此方法指派:
UIFont *font = [UIFont fontWithName:@"Georgia" size:14];
這裡傳進Name裡的參數是familyName而不是fontName。
二、擷取family名稱
那麼如何擷取這個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++);
}
使用上面的代碼即可周遊列印出所有的名稱,然後從列印中複制名稱到代碼中個人感覺更為科學。
三、外界字型引入項目
本人親測,在網上不管是windows字型,還是Android字型隻要是ttf格式的,一般iOS程式都支援内嵌。
具體步驟也很簡單:
1.将ttf檔案拖入項目中
2.修改plist檔案,加入Fonts provided by application 配置,後面填上拖進來的項目名
3.就可以在圖形化界面看到新的字型選擇了
4.如果不想從IB界面找,建議使用一下上面的周遊列印,可以用循環列印數量來最直接的看是否導入成功,并找到自己需要的内容。
5.運作項目得到自己想要的結果
四、動态字型
動态字型-Dynamic Type源于iOS7引入的一個文本渲染架構TextKit。主要的作用就是可以系統自設大小。當下的蘋果已經做了越來越多的人性化的處理,甚至連盲人模式都有。對于字型的展示也是考慮到了各人的喜好,有的人喜歡看大字,有的人喜歡看小字。在動态字型出來之前,有的應用也考慮到了此使用者體驗,比如網易新聞以前就有能夠在應用中設定偏好的字型大小功能。蘋果也整合到了整個手機中,動态字型的思想就是:在setting中設定字型大小,不單單系統的字型會變,連應用程式中的字型大小也會随之改變。前提是你應用程式中的字型的代碼寫的符合要求。
前面的文章大部分說的都是要在字型中選custom,這時要考慮動态字型就有選 Text Styles中的選項了。
UIFontTextStyleHeadline
UIFontTextStyleBody
UIFontTextStyleSubheadline
UIFontTextStyleFootnote
UIFontTextStyleCaption1
UIFontTextStyleCaption2
這些樣式顧名思義,就不每個都列出顯示效果了。标題,子标題,正文等等都是一些比較樸素。 我感覺這也就相當于word中的“樣式”,把自己的每個章節的标題子标題選中設定成标題一或者标題二 然後就能用word的自動生成目錄功能,并且一改某個樣式裡詳細設定,每個标題子标題的格式也都會随之改變。 這裡就是如果你在代碼中把字型用這些樣式,那你在手機setting裡設定大小之後應用字型會有所反應。
設定字型的位置是: 設定-》顯示與亮度-》文字大小
如上左圖是把尺寸調到了最大後的效果,下面的提示語隻有到最大才會顯示。 我試了下QQ裡的字型設定的都是動态字型,微信和支付寶暫時還不支援動态大小,在字型尺寸設定很大後微信支付寶沒反應,QQ則響應改變。上面右圖是在iphone6上截到QQ用戶端的展示效果。
設定動态字型的代碼實作如下:
UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];
項目中建議把動态字型和自動布局結合起來用,以防止字型設定改變後出現錯位Bug。
五、字型描述符
字型描述符-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會顯示成這樣:
六、擴充字型樣式
上面說了原生全部不支援中文,但是我們用中文的人還是比較多,中文字展現在在網上搜尋結果很多,但是大部分都不是想要的結果,要不就是不會讓你那麼簡單下載下傳的。我整理了一個常用的字型樣式包,裡面大緻包括:
華文行楷,華文琥珀,華文新魏,隸書 等等這些熟悉的名字
純淨下載下傳位址:http://share.weiyun.com/41030490c3059ae729eb8509c4b4761a
除了這些常用樣式,還有一些非正常的字型樣式,當然好的字型遇到時我會積累,并整理在下面,不要求多,隻要求精。
純淨下載下傳位址:http://share.weiyun.com/4000e63cf4ba083216815bc763cc3fad
如果有非常推薦的字型也歡迎告訴我 我整理在一起。
如果你不是在董鉑然部落格園看到本文,請點選檢視原文。
上面說的有個程式可以看到iOS所有字型的展示樣式,下載下傳位址在:https://github.com/dsxNiubility/SXFontShow