相对于屏幕大小缩放UI字体大小



我允许用户在他们的图像上添加一个UITextField,就像标题一样。

我已经设计好了,根据他们的iPhone屏幕大小,他们的图像都是完美的正方形。所以在我的iPhone 5S上,它将是一个320x320的UIImageView。iPhone 6的尺寸为375x375 UIImageView。在较小的手机中查看时,大屏幕手机发布的图像将按imageView缩小。

如何设置相对于屏幕宽度的字体大小?

我目前正在使用:

[UIFont systemFontOfSize:16.0]

使用这个合适吗?:

[UIFont systemFontOfSize:self.frame.size.width/20];

我不确定字体大小中的点大小实际代表的是什么。我也找到了[UIFont preferredFontForTextStyle:UIFontTextStyleBody];,但我不确定这是否是我想要的。

感谢

UIFont有一个方法可以为您获取系统字体大小。然后,您可以使用它来动态计算一个合理的字体大小。什么是合理的将由你来测试和试验。这将导致这样的事情:

UIFont *font = [UIFont systemFontOfSize:[UIFont systemFontSize]*[UIScreen mainScreen].bounds.width/375.0];

这有点过头了,但为了确保我的文本适合屏幕,我正在循环查找字体大小(因为我在自定义drawRect实现中呈现此文本(如果使用UILabel,可能有更好的方法)

    float FACTOR = 0.5f;
    UIFont *font = [UIFont fontWithName:_fontName size:_maximumSize];
    // paragraph for both
    NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
    paragraphStyle.alignment     = NSTextAlignmentCenter;
    // attributes for back
    NSDictionary *attributes = @{NSFontAttributeName            : font,
                                 NSParagraphStyleAttributeName  : paragraphStyle};
    CGSize textSize   = [_text sizeWithAttributes:attributes];
    // reduce font size until the text fits in bounds
    while(textSize.width > _view.bounds.size.width * FACTOR || textSize.height > _view.bounds.size.height * FACTOR)
    {
        _maximumSize--;
        font       = [font fontWithSize:_maximumSize];
        attributes = @{NSFontAttributeName            : font,
                       NSParagraphStyleAttributeName  : paragraphStyle};
        textSize   = [_progressText sizeWithAttributes:attributes];
    }

只需调整FACTOR即可使字体与视图边界相适应。

在Swift 4:中

let textToFit: String = ...
let maxWidth: CGFloat = ...
var font: UIFont = ...
var textAttributes: [NSAttributedStringKey: Any] = [
        .font: font,
        ...
    ]
while (textToFit.size(withAttributes: textAttributes).width > maxWidth)
{
    font = font.withSize(font.pointSize - 1.0)
    textAttributes[.font] = font
}
// You have your font now!

最新更新