Loading...
X

关于UIFont

本人在最近一个项目中,尝试使用Core Text进行富文本显示,有个功能点需要在使用Core Text的控件中加入自定义的UIView并排版。基本思路是用CTRunDelegate返回该UIView的高度和宽度,让Core Text进行排版计算CTFrame和CTFrameSetter;绘制完成后,获取该UIView的CTRunDelegate,根据它所在行的坐标可以计算出UIView的位置。为了显示美观,需要将该UIView和所在行的文字进行一些对齐,其中涉及到UIFont的ascender、descender、leading等属性,着实难以理解,庆幸找到一篇国外码农的解释,浅显易懂,图文并茂,作为记录勉强翻译一些以供快速查阅。

首先附上原文链接:http://www.cocoanetics.com/2010/02/understanding-uifont/ 。

 

为了更容易理解字体中各个属性的含义,原博主写了个程序显示一些UIFont的属性,如下图所示:

 

上图展现的字体是[UIFont boldSystemFontOfSize:56.0],Font Metirc一栏显示各个属性对应的值,每个属性的颜色和图中所示区域的线段颜色一致。UIFont的工厂函数只允许传入Point Size,其他属性都是由UIFont根据Point Size自动计算生成。原文中说明Point Size = ascender + 1 + decsender,这个略有疑问,根据定义和上图数据,ascender + 1 + descender = leading才对。

Baseline是绘字的基准线,图中为从上往下第四根略长的线段.Leading代表上下两行baseline之间的距离。最后,cap height代表大写字母的高度,而x height表示小写x的高度,为什么要专门挑出这两个数据,原博主也搞不明白,他猜测可能是用x height代表所有小写字母的高度。

Leave Your Observation

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>