根据屏幕大小调整 UIFont 大小的比例缩放

5

我希望用户能够添加一个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];,但我不确定这是否是我要找的。

谢谢

3个回答

1
在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!

1

UIFont有一个方法可以获取系统字体大小。然后,您可以使用该方法动态计算合理的字体大小。合理的字体大小需要您进行测试和实验。这将导致以下内容:

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

嗯,systemFontSize可能会有很大的差异,因为它取决于用户的iOS字体大小设置,对吧?我不确定它是否是一个理想的值可供使用。谢谢 - user339946
是的,我认为它确实如此。不过,我认为这是一个值得尊重的好设置。如果您不想这样做,只需定义适合您的大小作为默认值即可。 - Rick

1

这可能有点过度,但为了确保我的文本适合屏幕,我正在进行循环以找出字体大小(因为我正在使用自定义的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即可使字体相对于视图边界适合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接