究竟是什么UIFont的磅?(What exactly is UIFont's point

2019-06-26 17:27发布

我努力理解到底是什么在点大小UIFont手段。 这不是像素,它似乎并没有被点的标准定义是,它们涉及到1/72位的英寸。

我计算出使用像素大小-[NSString sizeWithFont:]在各种大小的字体,并得到了以下内容:

| Point Size | Pixel Size |
| ---------- | ---------- |
| 10.0       | 13.0       |
| 20.0       | 24.0       |
| 30.0       | 36.0       |
| 40.0       | 47.0       |
| 50.0       | 59.0       |
| 72.0       | 84.0       |
| 99.0       | 115.0      |
| 100.0      | 116.0      |

(我确实[@"A" sizeWithFont:[UIFont systemFontOfSize:theSize]]

看着那72.0点大小,不是1英寸的,因为这是与163 DPI的设备上,所以1英寸是163.0像素,对不对?

谁能解释什么是“点”,在UIFont来讲呢? 即是我上面的方法不对,真的,如果我用别的东西,我会看到一些关于字体为163个像素,72点? 抑或是纯粹的一个点从别的定义?

Answer 1:

一种字体具有一个内部的坐标系,把它作为一个单元正方形,在其内一个字形的矢量坐标在任何任意大小能够容纳所有的字形的字体指定+ - 的字体设计者选择裕量的任何量。

在72.0点字体的单位平方是一英寸。 字体Y的字形x具有相对于这个平方英寸的任意大小。 因此,一个字体设计者可以出现在与其他字体,或大或小的字体。 这是字体的“字符”的一部分。

因此,在72点画一个“A”告诉你,这将是两倍的“A”在相同的字体在36点拉 - 绝对没有别的关于实际的位图的大小将是什么。

即对于给定的字体来确定点的大小和像素之间的关系的唯一方式是测量它。



Answer 2:

我不知道怎么样-[NSString sizeWithFont:]措施的高度。 是否使用行高或贝济耶的峰之间的区别? 你用什么文字?

我相信-[UIFont lineHeight]将是更好的测量高度。

编辑:另外请注意,没有任何的测量方法返回像素尺寸。 它返回的大小points 。 你必须乘以结果[UIScreen mainScreen].scale

需要注意的区别typographic points建设的字体和时使用points从iOS的default logical coordinate space 。 不幸的是,不同的是文档中没有解释的很清楚。



Answer 3:

我首先想知道这有什么做的方式[1],而UI布局点在72定义每个“英寸” [CSS像素以96%的“寸”来定义。 (其中,当然,一个“英寸”无关与物理英寸。)为什么Web标准计算入UIKit的公司吗? 那么,你可以在调试器或崩溃报告检查堆栈跟踪时有一些WebKit的代码根本大量的UIKit,请注意,即使你不使用UIWebView 。 而事实上,它比这更简单。

首先,字体大小从最低下降器测量,以在规则的拉丁文字的最高上升器-例如,从“J”到“K”的顶部的底部,或用于方便的量度中的单个字符,该高度的 “ƒ”。 (这是U + 0192“钩拉丁小写字母F”,容易与选项-F美国Mac键盘上,人们用它来简化上键入“文件夹”遥想当年。)你会发现,当与方案测量,以像素为单位的高度(1x的显示器上)匹配指定的字体大小-例如用[UIFont systemFontOfSize:14] ,“ƒ”将是14个像素高。 (测量大写字母“A”仅占在字体大小测量的空间的任意部分这个部分可以在更小的字体大小改变;渲染字体向量的像素的情况下,“提示”修改的结果,以产生更清晰的屏幕上的文本。)

然而,字体包含各种不适合由该指标定义的空间字形。 有迹象表明,适合在“布局框”更大的字母与东欧语言的伸上述变音符号,以及各种标点符号和特殊字符。 (见Mac OS X中的特殊字符窗口大量的例子的数学符号部分。)

CGSize通过返回-[NSString sizeWithFont:] ,宽度占该串中的特定的字符,但高度仅反映的行数。 线高度由字体指定的度量单位,以及相关的“布局框”包含字体的最大字符。



Answer 4:

我同意这是非常混乱。 我想在这里给你一些基本的解释,以使事情更清晰。

首先,DPI(点每英寸)的东西来自印刷,物理试卷。 所以做字体。 单位有人发明了discribe文本的物理打印尺寸,只是因为英寸是普通的文本尺寸过大。 于是人们发明了一点,那就是1/72英寸长(在历史发展实际),便于描述文字大小。 所以,是的,如果你正在写在Word或其他文字处理软件文档进行打印时,你会如果你使用72pt字体得到绝对的一英寸高的文字。

其次,理论文字高度通常是呈现招,你可以通过你的眼睛实际看到的有所不同。 原文高度的想法来自用于打印的实际字形。 所有的字母都刻在字形块,共享相同的高度 - 这字体点高度一致。 然而,根据不同的字母和不同字体的设计,比理论高度的文字可能有点短的实际可见的部分。 Helvetica Neue字体其实很标准。 如果你衡量一个字母“K”到字母“P”的底部,顶部,它将匹配的字体高度。

第三,计算机显示器拧起来DPI,以及在相同时间点的定义。 电脑显示器的分辨率是由他们的原生像素描述,如1024×768或1920×1080的软件其实并不关心你的显示器的物理尺寸,因为如果他们扩展屏幕内容,如在纸张上打印一切都将是很模糊 - 只是物理分辨率不够高,使一切顺利,合法的。 软件使用非常简单的和死的方式:固定DPI为你使用任何显示器。 对于Windows,这是96DPI; 适用于Mac,这是72DPI。 这是说,不管有多少个像素监视器上做一英寸,软件只是忽略它。 当操作系统呈现在72pt文本,这将是永远96PX高在Windows和72px高在Mac上。 (这就是为什么Microsoft Word文档看起来总是在Mac较小,通常需要放大到125%。)

最后在iOS上,这是非常相似的,无论是在iPhone,iPod touch和iPad或Apple关注,iOS的采用固定72DPI非视网膜屏幕,144DPI为@ 2X视网膜显示器,和216DPI适用于iPhone 6中使用@ 3倍的Retina显示屏加。

忘掉现实英寸。 它只存在于实际打印,不显示。 对于软件在屏幕上显示文本,它只是一个人工比物理像素。



Answer 5:

事实上,据我已经能够确定,是UIFont所在。 所有UIKit需要调戏字体。 如果你想知道真相,你需要使用CoreText ,但在很多情况下,它会慢一些! (因此,在您像素高度的表的情况下,我认为它是,它增加了一些不大不小的+ BX因素,其中x是点的大小。

那么它为什么要这样做呢? 速度! UIKit四舍五入的东西,并用拨弄间距,以便它可以将位图缓存。 或者至少,这是我带走!



文章来源: What exactly is UIFont's point size?