2019独角兽企业重金招聘Python工程师标准>>>

一文让你彻底了解iOS字体相关知识

iOS字体

招聘信息:

作者:董铂然 授权本站转载。

写本文的契机主要是把自己整理的关于iOS字体方面的知识不断更新写在这篇博文中,用来自己以后查阅。

一、iOS原生字体展示

在 label中选择字体的font,并把font由system改成custom后,就能在family中看到72种特殊字体。这些里面就有很炫的字体,但 是全部是只针对英文数字,对中文无效。写了一个程序把所有的原生样式遍历出来展示可以达到如下效果。可以清楚地看到每个字体对应的样式,不用再一个个试 了。 如果你不是在董铂然博客园看到本文,请点击查看原文。

一 共是72种样式,我这个demo程序有两种展示方法,简洁展示和详细展示,简洁展示中只会把每个family的第一个font拿出来展示。最后一张图是详 细展示界面的。分了group展示,每个section对应一个family。可以看出苹果的原生字体还是有很多美观的字体,只是都仅对英文支持。

相信现在大部分的软件大部分的项目都是这么写代码的:

1

label.font = [UIFont systemFontOfSize:14];

如果不想用默认系统字体则需要使用此方法赋值:

1

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

这里传进Name里的参数是familyName而不是fontName。

二、获取family名称

那么如何获取这个family的名称?

方法1:在storyboard中或是xib中用label的图形化界面选中一个自己喜欢的样式,然后把名称记下写到代码中。

方法2:上面就有啊,从上面5张图中选吧。

方法3:(推荐)遍历

在UIFont类中有这些关于家族名和字体名的开放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++);

}

使用上面的代码即可遍历打印出所有的名称,然后从打印中复制名称到代码中个人感觉更为科学。

三、外界字体引入项目

本人亲测,在网上不管是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客户端的展示效果。

设置动态字体的代码实现如下:

1

UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];

项目中建议把动态字体和自动布局结合起来用,以防止字体设置改变后出现错位Bug。 

五、字体描述符

字体描述符-UIFontDescriptor  也是TextKit的核心之一,大致意思就是:字体描述符可以把一个你不知道详情的font样式临时存起来做修改或赋值给别人使用。在使用了上面的动态字体之后,可能你只知道现在的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];

关于样式一共有四种可选:

  • UIFontDescriptorTraitItalic

  • UIFontDescriptorTraitExpanded

  • UIFontDescriptorTraitCondensed

  • UIFontDescriptorTraitBold

字体描述符还有一个API是通过详细属性字典设置一个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];

这 上面分别设置了家族名,字体名,尺寸,形变,最后的size填0.0就可以,如果填了一个值,那这个值会把上面字典中的尺寸覆盖,感觉一般情况下应该不会 有人这么蛋疼用这种方法建样式,这个Attribute按command点进去还有很多,大多都是平时用不到的,有兴趣的可以一个一个钻研,好像一共有十 几个。

上面这段代码创建的label会显示成这样:

六、扩展字体样式

上面说了原生全部不支持中文,但是我们用中文的人还是比较多,中文字体现在在网上搜索结果很多,但是大部分都不是想要的结果,要不就是不会让你那么简单下载的。我整理了一个常用的字体样式包,里面大致包括:

华文行楷,华文琥珀,华文新魏,隶书 等等这些熟悉的名字

纯净下载地址:http://pan.baidu.com/s/1hqfGdpE   密码:31qs

除了这些常用样式,还有一些非常规的字体样式,当然好的字体遇到时我会积累,并整理在下面,不要求多,只要求精。

纯净下载地址:http://pan.baidu.com/s/1i38etV3  密码:hnv7

如果有非常推荐的字体也欢迎告诉我 我整理在一起。

如果你不是在董铂然博客园看到本文,请点击查看原文。

上面说的有个程序可以看到iOS所有字体的展示样式,下载地址在:https://github.com/dsxNiubility/SXFontShow

------------二、 iOS在应用中添加自定义字体-----------

摘要

开发某些娱乐性应用以及游戏时,个性的字体往往十分重要,这篇博客将介绍在项目中添加自定义的字体,并提供了一个小技巧。

iOS在应用中添加自定义字体

一、在应用中添加自定义字体的步骤

1、网上提供的字体库有很多,下载完成后,将其导入工程中,一般为ttf格式。

2、注意Build Phases中的Copy Bundle Resources中是否导入了文件:

3、在项目的info.plist文件中添加字体键值如下:

这个数组中可以添加多个元素,多个字体库。

4、这时实际上我们已经将字体添加进了工程中,但是在在使用这个字体时,字体的名字有时和文件名是不一样的,我们需要知道真实的字体名称,通常情况下,我们会讲所有字体名称打印出来:

    for (NSString * name in [UIFont familyNames]) {for (NSString * fo in [UIFont fontNamesForFamilyName:name]) {NSLog(@"%@",fo);}}

5、找到我们需要的字体,如下使用即可:

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

二、如何快速的找到新添加的字体名字

如果你将所有字体都打印了出来,在其中找到新的字体名称是身份困难的,尤其是当这个字体的名称和文件名相差甚远的时候,这是一件非常痛苦的事情。

为了在以后使用自定义字体的时候不必一次一次的经历这样的痛苦,在Xcode6.3的环境下,我将所有的系统字体获取后写入了plist文件,将这个plist文件导入项目中,通过如下方法,可以只打印出新增加的字体:

    NSString *paths=[[NSBundle mainBundle]pathForResource:@"font" ofType:@"plist"];//得到完整的文件名NSDictionary * rootDic = [NSDictionary dictionaryWithContentsOfFile:paths];//遍历当前所有字体for (NSString * name in [UIFont familyNames]) {NSArray * fontArray = [rootDic objectForKey:name];BOOL tip = NO;for (NSString * fo in [UIFont fontNamesForFamilyName:name]) {for (NSString * tmp in fontArray) {if ([tmp isEqualToString:fo]) {tip=YES;break;}}if (!tip) {NSLog(@"%@",fo);}}}

如果你也需要,字体集plist文件的地址:https://github.com/ZYHshao/YHBaseFoundationTest/tree/master/YHBase/BaseSouce。------------------

转载于:https://my.oschina.net/5951008876/blog/717636

一文让你彻底了解iOS字体相关知识相关推荐

  1. html字体相关知识

    一.长度单位 1:像素 px 实际上是屏幕上的一个个小点,100px,100个小点,这个点,正常情况我们是看不到, 如果我们把一个内容放大很多倍,就可以看到了, 在pc端(电脑端),一般情况下1px= ...

  2. iOS开发经验相关知识

    一. iPhone Size 手机型号 屏幕尺寸 iPhone 4 4s 320 * 480 iPhone 5 5s 320 * 568 iPhone 6 6s 375 * 667 iphone 6 ...

  3. iOS 录音相关知识

    除了上面说的,在AVFoundation框架中还要一个AVAudioRecorder类专门处理录音操作,它同样支持多种音频格式.与AVAudioPlayer类似,你完全可以将它看成是一个录音机控制类, ...

  4. iOS 字体适配(转)

    微信字体尺寸适配: https://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=207113485&idx=1&sn=c4961 ...

  5. 「css基础」关于字体相关的基础知识(一)

    常言道网页设计的好坏,95%取决于字体的排版.尽管现在抖音.小视频和游戏的盛行,其占据了我们大部分的业余时间,但是还是有大部分人在网络上进行阅读,比如查阅资料,阅读小说.看新闻.知识学习之类. 舒适的 ...

  6. ios 字体 机打动效_24种打动朋友的方法

    ios 字体 机打动效 In the run up to Christmas, learn a new web development tip every day at 24 ways - by Ch ...

  7. UI设计规范整理一iOS字体和切图及规范

    UI设计规范一iOS字体和切图及规范 说明: 1.对象为程序员等开发人员. 2.方法有千种,仅供参考. 3.文档的本质是备份与查看,对外方便协作与对内提升效率. 4.文档不是万能的,如果文档查看对象看 ...

  8. iOS字体大小适配的几种方法

    摘要:在iOS开发中,有些公司对字体也有适配要求,为了让字体美观,所以在不同尺寸的屏幕上字体大小也要做到适配. 自己总结了几种方法供大家参考. 方法一:用宏定义适配字体大小(根据屏幕尺寸判断) //宏 ...

  9. iOS字体大小适配机型的几种方法

    在iOS开发中,有些公司对字体也有适配要求,为了让字体美观,所以在不同尺寸的屏幕上字体大小也要做到适配. 自己总结了几种方法供大家参考. 方法一:用宏定义适配字体大小(根据屏幕尺寸判断) //宏定义 ...

  10. 「项目实战」一文读懂思科网络设备IOS系统

    今天给大家带来的小知识是一文读懂思科的IOS系统,相信大家都有了解,但是今天呢给大家把完整的流程梳理出来,这样有助于大家记笔记哦! IOS是被用来传送网络服务并启动网络应用的.Cisco路由器的IOS ...

最新文章

  1. linux下clone一直运行,如何在Linux上使用clone()创建真正的线程?
  2. java排序——桶排序
  3. 【AtCoder】AGC017
  4. jdk8和hotspot_HotSpot的-XshowSettings标志的简单性和价值
  5. python中的thread_Python中的thread
  6. Problem D: 编程题B-向量的数量积
  7. 重拾C,一天一点点_12
  8. Android studio修改包
  9. 二维卷积神经网络的结构理解
  10. python读写磁盘扇区数据_[Win32] 直接读写磁盘扇区(磁盘绝对读写)
  11. python executemany_Python MySQLdb executemany
  12. 用Unity简单实现第三人称人物的移动和转向
  13. Neat Download Manager-ndm下载器:短小精悍的mac下载工具
  14. Python(十三)企业微信Api自动化框架搭建
  15. Java 日期格式化规则
  16. jmeter beanshell 之常用的代码
  17. eclipse画UML图
  18. 抖音高贵气质的签名_抖音签名大全2020最新版-抖音个性签名男生女生-抖音个性签名霸气-腾牛个性网...
  19. mysql chunk 函数_Laravel中的chunk组块结果集处理与注意问题
  20. 2019,关于我的故事

热门文章

  1. 深入浅出通信原理笔记(1)
  2. GHOST自动恢复说明
  3. WPF使用PictureBox
  4. 用户画像算法分享和干货推荐
  5. 【工具推荐】个人本地 markdown 知识图谱软件 Obsidian
  6. sql 获取当前之后某天的日期
  7. 完全免费!6个不可错过的图片、视频等资源网站分享,个个都是精品!
  8. Spring-core源码 -- AlternativeJdkIdGenerator Spring的UUID生成器类
  9. 短视频解析,去水印原理整理汇总
  10. 设计一个序列信号发生器, 产生序列信号1011101. 用74LS161和4选1数据选择器74153及必要的门电路实现