Objective c 使用CGSize点或像素确定UIFont大小

Objective c 使用CGSize点或像素确定UIFont大小,objective-c,swift,uiview,uifont,cgrect,Objective C,Swift,Uiview,Uifont,Cgrect,我可以用精确定义的点大小(例如(20x20))制作CGRect,这样我就可以精确计算屏幕上的实际大小(厘米或英寸)。 -(void) drawRect:(CGRect)rect{ [super drawRect:rect]; CGRect rectangle = CGRectMake(0, 0, 20, 20); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetRGBFillColor

我可以用精确定义的点大小(例如(20x20))制作CGRect,这样我就可以精确计算屏幕上的实际大小(厘米或英寸)。

-(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的大小(总是只有一个字符“A..Z”或“1..9”),这样我至少可以计算屏幕上的实际高度。
-(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);
}

是否可以从CGSize到UIfont size计算字体大小,使其在屏幕上真正匹配?

我找到了解决此类问题的方法
如果您想要一个UIFont来适应CGRect或标签,那么在大多数情况下它不会适应CGRect。原因是字体特定的填充。 如果希望字体适合CGRect,则必须知道如何使用小写或大写字母,然后将Font.xHeigth或Font.capHeight设置为Font.pointSize。因此,您将获得更大的字体.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;
}

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

我找到了解决这类问题的方法
如果您想要一个UIFont来适应CGRect或标签,那么在大多数情况下它不会适应CGRect。原因是字体特定的填充。 如果希望字体适合CGRect,则必须知道如何使用小写或大写字母,然后将Font.xHeigth或Font.capHeight设置为Font.pointSize。因此,您将获得更大的字体.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;
}
这篇文章帮助我了解了更多关于