我允许用户在他们的图像上添加一个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!