在其边界框内获取字符串基线位置

时间:2014-10-06 05:13:04

标签: ios swift ios8 nsattributedstring cgsize

我一直在使用sizeWithAttributes来获取所需的widthheight以便绘制NSAttributedString。这样可以很好地获得width因为宽度返回的值非常贴合 - 它是从第一个字符到最后一个字符计算的,没有添加任何额外的填充。但是对于height,它返回的值大于我想要的值。这是因为它必须从最高字母的顶部开始计算height并向下延伸到最低字符的底部 - 例如g字符延伸到基线以下。

我不相信这个API是“智能的”#39;因为我的字符串中没有任何字符延伸到基线以下,但返回的高度太高。它似乎正在考虑可以用这些属性显示的任何可能的角色。

我需要一种方法来减去额外填充的数量"在字符串下面。我想计算基线相对于height的位置,或者计算基线下面区域专用空间的其他方法。下图说明了我认为发生了什么,虽然填充量有点极端。

-------------

--greetings--
              <-get rid of this 'extra' padding
-------------

我相信boundingRectWithSize:options:context:会给我相同的维度,而且我不知道有任何其他(不推荐的)API来计算字符串大小。

1 个答案:

答案 0 :(得分:1)

UIFont具有属性ascender(高于基线的高度)和descender(负值,高度低于基线)。这可能就是你要找的东西。