ios - 使用 UIFont 时处理点或像素

标签 ios uifont

我试图在我的 drawRect:(CGRect) 方法中将字符串定位在 CGRect 的垂直中心。

CGRect 的大小是这样的:

CGRect rect = CGRectMake(0.0f, 0.0f, rectWidth, rectHeight);

为了绘制字符串使其居中,我首先尝试了这个:

CGFloat diffHeightRectAndFont = rectHeight - font.capHeight;
[str drawAtPoint:CGPointMake(0.0f, diffHeightRectAndFont * 0.5f) withFont:font];

我首先假设这会发现我的矩形和字体之间的高度差异,然后将字体偏移这个高度的一半应该在“最佳点”中给出一个 y 位置。

但是,capHeight 以磅为单位,而 rectHeight 以像素为单位,因此这种解决方案适用于大小范围为 12-15 的字体。之后,差异开始将字符串定位在矩形之外。

我仔细检查了几次,结果证明唯一正确定位字符串的方法是这个“hack”,它是有效的,但不会对代码的可读性产生影响:

CGFloat diffHeightRectAndFont = rectHeight - [[NSString stringWithString:@"F"] sizeWithFont:font].height;

是否有更直接的方法来获取使用特定字体的大写字母的像素高度?

提前谢谢你:)

最佳答案

我知道有点晚了。但尽管如此,我的回答还是帮助了其他人。

NSString 有一个 sizeWithFont: 方法(记录在 here 中),我认为可以用于此。它返回一个 CGSize 结构,因此您可以执行类似于以下的操作来查找标签内文本的高度。

CGSize textSize = [[标签文字] sizeWithFont:[标签字体]];

CGFloat heightOfStringWithSpecifiedFont = textSize.height;

UILabel 有一个字体属性,您可以使用它动态获取标签的字体详细信息,就像我在上面所做的那样。

希望这有帮助:)

关于ios - 使用 UIFont 时处理点或像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5682412/

相关文章:

ios cocos2d 2.0 使用什么代替 glNormalPointer

ios - 升级到 XCode 7 后在 Bridging Header 中找不到头文件

iphone - 从一个 UITable 控制另一个 UITable

ios - 根据其框架大小设置 UILabel 字体大小?

ios - 如何从 otf 或 ttf 文件中获取字体名称?

ios - 动态模拟 iOS 动态类型系统文本大小 (UIContentSizeCategory)

ios - 停止 youtube 视频在 xcode/cordova 1.6.1 中打开 youtube 应用程序

iphone - iOS:如何确定 CPU 类型,例如A4还是A5,或者指令集架构arm6还是arm7?

iphone - -systemFontOfSize : and -boldSystemFontOfSize:? 之间是否有中等粗细的字体

ios - UISegmentedControl 更改 ONE 段的字体