我允许用户在图片上添加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];
,但我不确定这是否是我正在寻找的。 p>
由于
答案 0 :(得分:1)
UIFont
有一个方法可以获取系统字体大小。然后,您可以使用它来动态计算合理的字体大小。什么是合理的将由你来测试和试验。这将导致类似这样的事情:
UIFont *font = [UIFont systemFontOfSize:[UIFont systemFontSize]*[UIScreen mainScreen].bounds.width/375.0];
答案 1 :(得分: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
即可使字体相对于视图边界适合。
答案 2 :(得分:0)
在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!