objective-c - 使用 CGSize Points 或 Pixels 确定 UIFont 大小

标签 objective-c swift uiview uifont cgrect

我可以制作一个具有精确定义的 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 的大小(总是只有一个字符“A..Z”或“1..9”),这样我至少可以计算出 UIFont 的实际高度屏幕。

是否可以计算从 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 的信息

关于objective-c - 使用 CGSize Points 或 Pixels 确定 UIFont 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36617693/

相关文章:

ios - 为什么这个 NSMutableAttributedString addAttribute 只有在我使用 mutableCopy 时才有效

json - 使用 Swift 可解码解析 JSON 字典时出错

ios - 预期标识符

ios - UIView animateWithDuration 没有动画,它只是加载

iphone - 在 iPhone 上下载 XML 文件,存储它然后使用它

ios - 适用于 iOS 的 Robbiehanson xmpp 框架不接收聊天消息

ios - TableView 的单元格未显示

ios - UIViewController 中的 UICollectionView

ios - UIButton 的一部分不响应触摸事件

IOS - PayPal SDK - 屏幕变黑