一、iOS原生字體展示
在label中選擇字體的font,并把font由system改成custom后央串,就能在family中看到72種特殊字體。這些里面就有很炫的字體碗啄,但是全部是只針對(duì)英文數(shù)字蹋辅,對(duì)中文無(wú)效。寫(xiě)了一個(gè)程序把所有的原生樣式遍歷出來(lái)展示可以達(dá)到如下效果挫掏。可以清楚地看到每個(gè)字體對(duì)應(yīng)的樣式秩命,不用再一個(gè)個(gè)試了尉共。 如果你不是在董鉑然博客園看到本文,請(qǐng)點(diǎn)擊查看原文弃锐。
一共是72種樣式袄友,我這個(gè)demo程序有兩種展示方法,簡(jiǎn)潔展示和詳細(xì)展示霹菊,簡(jiǎn)潔展示中只會(huì)把每個(gè)family的第一個(gè)font拿出來(lái)展示剧蚣。最后一張圖是詳細(xì)展示界面的支竹。分了group展示,每個(gè)section對(duì)應(yīng)一個(gè)family鸠按±窀椋可以看出蘋(píng)果的原生字體還是有很多美觀的字體,只是都僅對(duì)英文支持目尖。
相信現(xiàn)在大部分的軟件大部分的項(xiàng)目都是這么寫(xiě)代碼的:
1
label.font = [UIFont systemFontOfSize:14];
如果不想用默認(rèn)系統(tǒng)字體則需要使用此方法賦值:
1
UIFont *font = [UIFont fontWithName:@
"Georgia"
size:14];
這里傳進(jìn)Name里的參數(shù)是familyName而不是fontName馒吴。
二、獲取family名稱(chēng)
那么如何獲取這個(gè)family的名稱(chēng)瑟曲?
方法1:在storyboard中或是xib中用label的圖形化界面選中一個(gè)自己喜歡的樣式饮戳,然后把名稱(chēng)記下寫(xiě)到代碼中。
方法2:上面就有啊洞拨,從上面5張圖中選吧扯罐。
方法3:(推薦)遍歷
在UIFont類(lèi)中有這些關(guān)于家族名和字體名的開(kāi)放API,通過(guò)這些可以清晰的寫(xiě)個(gè)遍歷打印烦衣,查看所有的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++);
}
使用上面的代碼即可遍歷打印出所有的名稱(chēng)歹河,然后從打印中復(fù)制名稱(chēng)到代碼中個(gè)人感覺(jué)更為科學(xué)。
三琉挖、外界字體引入項(xiàng)目
本人親測(cè)启泣,在網(wǎng)上不管是windows字體,還是Android字體只要是ttf格式的示辈,一般iOS程序都支持內(nèi)嵌寥茫。
具體步驟也很簡(jiǎn)單:
1.將ttf文件拖入項(xiàng)目中
2.修改plist文件,加入Fonts provided by application 配置矾麻,后面填上拖進(jìn)來(lái)的項(xiàng)目名
3.就可以在圖形化界面看到新的字體選擇了
4.如果不想從IB界面找纱耻,建議使用一下上面的遍歷打印,可以用循環(huán)打印數(shù)量來(lái)最直接的看是否導(dǎo)入成功险耀,并找到自己需要的內(nèi)容弄喘。
5.運(yùn)行項(xiàng)目得到自己想要的結(jié)果
四、動(dòng)態(tài)字體
動(dòng)態(tài)字體-Dynamic Type源于iOS7引入的一個(gè)文本渲染框架TextKit甩牺。主要的作用就是可以系統(tǒng)自設(shè)大小蘑志。當(dāng)下的蘋(píng)果已經(jīng)做了越來(lái)越多的人性化的處理,甚至連盲人模式都有贬派。對(duì)于字體的展示也是考慮到了各人的喜好急但,有的人喜歡看大字,有的人喜歡看小字搞乏。在動(dòng)態(tài)字體出來(lái)之前波桩,有的應(yīng)用也考慮到了此用戶(hù)體驗(yàn),比如網(wǎng)易新聞以前就有能夠在應(yīng)用中設(shè)置偏好的字體大小功能请敦。蘋(píng)果也整合到了整個(gè)手機(jī)中镐躲,動(dòng)態(tài)字體的思想就是:在setting中設(shè)置字體大小储玫,不單單系統(tǒng)的字體會(huì)變,連應(yīng)用程序中的字體大小也會(huì)隨之改變萤皂。前提是你應(yīng)用程序中的字體的代碼寫(xiě)的符合要求撒穷。
前面的文章大部分說(shuō)的都是要在字體中選custom,這時(shí)要考慮動(dòng)態(tài)字體就有選 Text Styles中的選項(xiàng)了敌蚜。
UIFontTextStyleHeadlineUIFontTextStyleBodyUIFontTextStyleSubheadlineUIFontTextStyleFootnoteUIFontTextStyleCaption1UIFontTextStyleCaption2
這些樣式顧名思義桥滨,就不每個(gè)都列出顯示效果了。標(biāo)題弛车,子標(biāo)題齐媒,正文等等都是一些比較樸素。 我感覺(jué)這也就相當(dāng)于word中的“樣式”纷跛,把自己的每個(gè)章節(jié)的標(biāo)題子標(biāo)題選中設(shè)置成標(biāo)題一或者標(biāo)題二 然后就能用word的自動(dòng)生成目錄功能喻括,并且一改某個(gè)樣式里詳細(xì)設(shè)置,每個(gè)標(biāo)題子標(biāo)題的格式也都會(huì)隨之改變贫奠。 這里就是如果你在代碼中把字體用這些樣式唬血,那你在手機(jī)setting里設(shè)置大小之后應(yīng)用字體會(huì)有所反應(yīng)。
設(shè)置字體的位置是: 設(shè)置-》顯示與亮度-》文字大小
如上左圖是把尺寸調(diào)到了最大后的效果唤崭,下面的提示語(yǔ)只有到最大才會(huì)顯示拷恨。 我試了下QQ里的字體設(shè)置的都是動(dòng)態(tài)字體,微信和支付寶暫時(shí)還不支持動(dòng)態(tài)大小谢肾,在字體尺寸設(shè)置很大后微信支付寶沒(méi)反應(yīng)腕侄,QQ則響應(yīng)改變。上面右圖是在iphone6上截到QQ客戶(hù)端的展示效果芦疏。
設(shè)置動(dòng)態(tài)字體的代碼實(shí)現(xiàn)如下:
1
UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];
項(xiàng)目中建議把動(dòng)態(tài)字體和自動(dòng)布局結(jié)合起來(lái)用冕杠,以防止字體設(shè)置改變后出現(xiàn)錯(cuò)位Bug∷彳睿
五分预、字體描述符
字體描述符-UIFontDescriptor 也是TextKit的核心之一,大致意思就是:字體描述符可以把一個(gè)你不知道詳情的font樣式臨時(shí)存起來(lái)做修改或賦值給別人使用薪捍。在使用了上面的動(dòng)態(tài)字體之后笼痹,可能你只知道現(xiàn)在的text-Style但是詳細(xì)的familyName,fontName都不知道是什么酪穿,這種情況下如果想修改字體的樣式為斜體或粗體就只能使用這種方法:
1
2
3
4
5
6
// ------取出當(dāng)前正文的字體樣式
UIFontDescriptor *bodyFontDesciptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleBody];
// ------把樣式改為斜體
UIFontDescriptor *italicFontDescriptor = [bodyFontDesciptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
// ------賦值給另一個(gè)label凳干。
self.titleLabel.font = [UIFont fontWithDescriptor:italicFontDescriptor size:0.0];
關(guān)于樣式一共有四種可選:
UIFontDescriptorTraitItalic
UIFontDescriptorTraitExpanded
UIFontDescriptorTraitCondensed
UIFontDescriptorTraitBold
字體描述符還有一個(gè)API是通過(guò)詳細(xì)屬性字典設(shè)置一個(gè)label的樣式,寫(xiě)法如下
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就可以净响,如果填了一個(gè)值,那這個(gè)值會(huì)把上面字典中的尺寸覆蓋喳瓣,感覺(jué)一般情況下應(yīng)該不會(huì)有人這么蛋疼用這種方法建樣式馋贤,這個(gè)Attribute按command點(diǎn)進(jìn)去還有很多,大多都是平時(shí)用不到的畏陕,有興趣的可以一個(gè)一個(gè)鉆研配乓,好像一共有十幾個(gè)。
上面這段代碼創(chuàng)建的label會(huì)顯示成這樣:
六惠毁、擴(kuò)展字體樣式
上面說(shuō)了原生全部不支持中文犹芹,但是我們用中文的人還是比較多,中文字體現(xiàn)在在網(wǎng)上搜索結(jié)果很多鞠绰,但是大部分都不是想要的結(jié)果腰埂,要不就是不會(huì)讓你那么簡(jiǎn)單下載的。我整理了一個(gè)常用的字體樣式包蜈膨,里面大致包括:
華文行楷屿笼,華文琥珀,華文新魏翁巍,隸書(shū) 等等這些熟悉的名字
純凈下載地址:http://pan.baidu.com/s/1hqfGdpE 密碼:31qs
除了這些常用樣式驴一,還有一些非常規(guī)的字體樣式,當(dāng)然好的字體遇到時(shí)我會(huì)積累灶壶,并整理在下面肝断,不要求多,只要求精例朱。
純凈下載地址:http://pan.baidu.com/s/1i38etV3 密碼:hnv7
如果有非常推薦的字體也歡迎告訴我 我整理在一起孝情。
如果你不是在董鉑然博客園看到本文,請(qǐng)點(diǎn)擊查看原文洒嗤。
上面說(shuō)的有個(gè)程序可以看到iOS所有字體的展示樣式箫荡,下載地址在:https://github.com/dsxNiubility/SXFontShow