做者:董铂然 受权本站转载。html
写本文的契机主要是把本身整理的关于iOS字体方面的知识不断更新写在这篇博文中,用来本身之后查阅。git
1、iOS原生字体展现github
在 label中选择字体的font,并把font由system改为custom后,就能在family中看到72种特殊字体。这些里面就有很炫的字体,但 是所有是只针对英文数字,对中文无效。写了一个程序把全部的原生样式遍历出来展现能够达到以下效果。能够清楚地看到每一个字体对应的样式,不用再一个个试 了。 若是你不是在董铂然博客园看到本文,请点击查看原文。windows
一 共是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文件拖入项目中
2.修改plist文件,加入Fonts provided by application 配置,后面填上拖进来的项目名
3.就能够在图形化界面看到新的字体选择了
4.若是不想从IB界面找,建议使用一下上面的遍历打印,能够用循环打印数量来最直接的看是否导入成功,并找到本身须要的内容。
5.运行项目获得本身想要的结果
4、动态字体
动 态字体-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。
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会显示成这样:
6、扩展字体样式
上面说了原生所有不支持中文,可是咱们用中文的人仍是比较多,中文字体如今在网上搜索结果不少,可是大部分都不是想要的结果,要不就是不会让你那么简单下载的。我整理了一个经常使用的字体样式包,里面大体包括:
华文行楷,华文琥珀,华文新魏,隶书 等等这些熟悉的名字
纯净下载地址:http://pan.baidu.com/s/1hqfGdpE 密码:31qs
除了这些经常使用样式,还有一些很是规的字体样式,固然好的字体遇到时我会积累,并整理在下面,不要求多,只要求精。
纯净下载地址:http://pan.baidu.com/s/1i38etV3 密码:hnv7
若是有很是推荐的字体也欢迎告诉我 我整理在一块儿。
若是你不是在董铂然博客园看到本文,请点击查看原文。
上面说的有个程序能够看到iOS全部字体的展现样式,下载地址在:https://github.com/dsxNiubility/SXFontShow