我想在自定义视图中绘制一个NSAttributedString并使其垂直居中,无论字体、大小等如何。该字符串只是1-99之间的小数字。
到目前为止,我已经尝试调用[NSAttributedString size]方法来确定绘制字符串的高度。计划使用高度值在使用drawInRect:或drawAtPoint:绘制时居中字符串。我的问题是,从size方法返回的高度大于绘制的字形。经过一些实验后,似乎size:方法返回具有这些属性的最高可能字形(包括下降字符等)的高度,而不是我NSAttributedString中特定字形的高度。
更新:
如Joshua Nozzi在他的答案中提到的那样,我可以理解垂直居中所需使用的最大高度,因为这将防止文本随着字符串的更改而在垂直方向上跳动。但是,在我的情况下,我想要在圆圈内部视觉上居中一个数字,例如“10”。这时,我关心的是行“10”的实际高度。
如何获得与绘制的实际字形紧密绑定的边界框?我认为我可以使用Core Text和CTLineGetImageBounds()函数来实现它;然而,这是很多代码。如果我可以不使用这种冗长/低级别的代码来完成它,那会更好。
我知道我可能完全错了。你有什么建议?我需要直接使用Cocoa Text/Core Text,而不是使用NSAttributedString的附加功能吗?
Mac OS中的文本系统非常丰富,对于像我这样的初学者来说有点令人生畏。非常感谢任何帮助。
到目前为止,我已经尝试调用[NSAttributedString size]方法来确定绘制字符串的高度。计划使用高度值在使用drawInRect:或drawAtPoint:绘制时居中字符串。我的问题是,从size方法返回的高度大于绘制的字形。经过一些实验后,似乎size:方法返回具有这些属性的最高可能字形(包括下降字符等)的高度,而不是我NSAttributedString中特定字形的高度。
更新:
如Joshua Nozzi在他的答案中提到的那样,我可以理解垂直居中所需使用的最大高度,因为这将防止文本随着字符串的更改而在垂直方向上跳动。但是,在我的情况下,我想要在圆圈内部视觉上居中一个数字,例如“10”。这时,我关心的是行“10”的实际高度。
如何获得与绘制的实际字形紧密绑定的边界框?我认为我可以使用Core Text和CTLineGetImageBounds()函数来实现它;然而,这是很多代码。如果我可以不使用这种冗长/低级别的代码来完成它,那会更好。
我知道我可能完全错了。你有什么建议?我需要直接使用Cocoa Text/Core Text,而不是使用NSAttributedString的附加功能吗?
Mac OS中的文本系统非常丰富,对于像我这样的初学者来说有点令人生畏。非常感谢任何帮助。