IOS字体的实际显示大小与指标不匹配

时间:2017-11-18 22:06:15

标签: ios fonts

我正在编写一个iPad应用程序,无论屏幕大小如何,都要求以精确的点大小显示字母。 我已经使用UILabel对象实现了文本显示。我将Autoshrink属性设置为Fixed Font Size,但屏幕上的字母比字体指标小得多。例如,251磅字体的大写,应该是3.5英寸高,在屏幕上只有2英寸。在不同的点尺寸下,会发生相同的收缩。 fontCapHeight与我使用的字体的字体大小相同。 如何使显示的大小与字体大小相同?

2 个答案:

答案 0 :(得分:0)

  

例如,251磅字体的大写,应该是3.5英寸高,屏幕上只有2英寸。

你假设一个点是1/72“,这不是真的。这是一个桌面发布点.iOS中的一个点是一定数量的像素(基于比例)。一英寸的像素数是屏幕像素密度(PPI)的一个因素.iOS无法查询我所知道的内容。你必须有一个知道的大表。一个相当不错的表是GBDeviceInfo ,但最终它只是根据查找规格或测量屏幕而有一个很大的价值表。

您需要将您的上限(pt)设为(ppi/scale)*inches,但不能直接设置上限。您需要通过em框大小(“字体大小”)进行设置。这是一个例子。它需要一个包含任何大小字体的标签,并使其高度为3“。

    let font = label.font!

    let ppi = 326.0 // iPhone 6s
    let scale = Double(UIScreen.main.scale)
    let desiredSize = 3.0 // inches

    let emBoxRatio = Double(font.pointSize / font.capHeight)

    let fontSize = (ppi / scale) * desiredSize * emBoxRatio

    label.font = label.font.withSize(CGFloat(fontSize))

请记住,“使其高度为3英寸”与“使任何特定字母为3英寸”不同。这取决于字体和字母。在许多字体中,具有弯曲顶部的字形比帽高度稍高,并且一些上升部分可能比帽高度稍高。虽然H,X和I通常恰好是帽高,但有时它们会更短(有时O是帽高而不是X)。有时字形高于其基线。没有任何东西可以说字体甚至必须放在它的em盒子里,而且有些字体在外面画得很疯狂(Zapfino,我在看着你)。

我唯一的观点是你需要仔细检查你的实际字体。字体指标充其量只是提供建议。它们的目的是让具有类似指标的字体“感觉”相同。它们并不总是绝对的衡量标准。

我不明白这一点:

  

fontCapHeight与我使用的字体的字体大小相同

如果上限高度与“字体大小”(em框高度)相同,那么下降器在哪里?感觉就像你已经用完了。

答案 1 :(得分:0)

问题解决了。我在http://blog.fluidui.com/designing-for-mobile-101-pixels-points-and-resolutions/找到了以下声明:" iOS点相当于1/163英寸。无论手机的分辨率如何,此大小始终相同,并且来自原始iPhone的163DPI。"我无法在Apple文档中的任何地方找到它,但我确定它存在于某个地方!