mat*_*way 49 fonts objective-c uikit uifont ios
我正在努力准确地理解点大小的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 |
Run Code Online (Sandbox Code Playgroud)
(我做了[@"A" sizeWithFont:[UIFont systemFontOfSize:theSize]]
)
并且72.0
看点大小,这不是1英寸,因为这是在DPI为163的设备上,所以1英寸将是163.0像素,对吧?
任何人都可以用UIFont
术语解释什么是"点" ?即我的方法是错误的,如果我使用别的东西,我会看到有关字体的东西是72点的163像素?或者纯粹是从其他东西定义一个点?
hoo*_*oop 12
字体具有内部坐标系,将其视为单位正方形,其中字形的矢量坐标以任意大小指定,适应字体中的所有字形+ - 字体设计者选择的任何边距.
在72.0点,字体的单位平方是一英寸.字形X字型的ý具有相对于这个平方英寸的任意大小.因此,字体设计者可以制作相对于其他字体显得大或小的字体.这是字体'字符'的一部分.
因此,在72点处绘制一个'A'会告诉您它将是同一字体中36点绘制的'A'的两倍 - 而且实际的位图大小绝对没有其他内容.
即对于给定的字体,确定点大小和像素之间关系的唯一方法是测量它.
我不确定如何-[NSString sizeWithFont:]
衡量身高.它是使用线高还是贝塞尔峰的差异?你用了什么文字?
我相信-[UIFont lineHeight]
测量高度会更好.
编辑:另外,请注意,没有一种测量方法返回大小(以像素为单位).它返回大小points
.你必须乘以结果[UIScreen mainScreen].scale
.
请注意typographic points
构造字体和points
iOS 时使用的区别default logical coordinate space
.不幸的是,文档中没有非常清楚地解释这种差异.