使用 CGSize Points 或 Pixels 确定 UIFont 大小

Determine UIFont size with CGSize Points or Pixels

我可以制作一个具有精确定义的 PointSize 的 CGRect,例如 (20x20),这样我就可以准确计算屏幕上的实际尺寸(厘米或英寸)。

-(void) drawRect:(CGRect)rect{    
  [super drawRect:rect];  
  CGRect rectangle = CGRectMake(0, 0, 20, 20);
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
  CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0);
  CGContextFillRect(context, rectangle);
}

我想以某种类似的方式确定 UIFont 的大小(总是只有一个 Charackter "A..Z" 或“1..9”),这样我至少可以计算出实际高度屏幕。

是否可以计算从 CGSize 到 UIfont Size 的字体大小,以便它在屏幕上真正匹配?

我找到了解决此类问题的方法。
如果你想让 UIFont 适合 CGRect 或标签,在大多数情况下它不会适合 CGRect。原因是字体特定的填充。 如果你想让一个字体适合一个 CGRect,你必须知道是使用小写字母还是大写字母,然后将 font.xHeigth 或 font.capHeight 设置为 font.pointSize。因此你会得到更大的 font.pointsize.
这个小代码片段解决了我的问题:

+(CGFloat) fitFontSize:(UIFont*) font{
    CGFloat fontSize = font.pointSize;
    bool fontSizeAdjusted = false;

    while (!fontSizeAdjusted) {
        CGFloat xHeight = font.xHeight;
        if( fontSize-xHeight > 0.1 ){
            font = [font fontWithSize:font.pointSize+1];
        }else{
            fontSizeAdjusted = true;
            fontSize = font.pointSize;
        }
    }
    return fontSize;
}

这篇文章帮助我了解了更多 UIFonts