【问题标题】:Dealing with points or pixels when using UIFont使用 UIFont 时处理点或像素
【发布时间】:2012-08-29 23:26:49
【问题描述】:

我试图在我的 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;

有没有更直接的方法可以使用特定字体获取大写字母的像素高度?

提前谢谢你:)

【问题讨论】:

    标签: ios uifont


    【解决方案1】:

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

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

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

    CGFloat heightOfStringWithSpecifiedFont = textSize.height;

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

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 2023-03-26
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多