我正在为iPhone系列开发基于Swift的iOS应用程序。我的应用程序支持从iPhone 4s到iPhone X的所有设备。随着我为高端设备增加了较大的字体大小,在较小的设备(如iPhone 4s)中,标签的显示也变大了。有人可以帮助我如何根据设备缩放字体。我尝试了具有紧凑/常规宽度和紧凑/常规高度的尺寸类别,但没有一个对我有帮助。非常感谢您的帮助
答案 0 :(得分:3)
答案 1 :(得分:1)
以编程方式
无需使用情节提要,我可以根据屏幕宽度简单地更改字体大小,如下所示:
func dynamicFontSize(_ FontSize: CGFloat) -> CGFloat {
let screenWidth = UIScreen.main.bounds.size.width
let calculatedFontSize = screenWidth / 375 * FontSize
return calculatedFontSize
}
,可以用作:
myLabel.font = UIFont(name: "Helvetica", size: dynamicFontSize(20))
请注意,在dynamicFontSize
函数中,数字 375 只是字体大小计算的基础,因为我通常在iPhone 8上测试我的应用程序(即字体大小18 在iPhone 8上实际上是18,因为其实际宽度为375)。您可以根据自己的喜好更改此数字。
故事板
如果您坚持使用情节提要,则可以创建一个新的swift文件子类UILabel
,并使用@IBInspectable
,如下所示:
import UIKit
class UILabelFontClass: UILabel {
@IBInspectable var DynamicFontSize: CGFloat = 0 {
didSet {
overrideFontSize(FontSize: DynamicFontSize)
}
}
func overrideFontSize(FontSize: CGFloat){
let fontName = self.font.fontName
let screenWidth = UIScreen.main.bounds.size.width
let calculatedFontSize = screenWidth / 375 * FontSize
self.font = UIFont(name: fontName, size: calculatedFontSize)
}
}
标签中的内部故事板子类UILabelFontClass
:
现在,在“属性”检查器中,您可以设置字体大小:
答案 2 :(得分:0)
不是为UILabel创建不同的类。您可以进行 UILabel 扩展,并使用此 IBDesignable解决方案从情节提要中设置值。
此处基本宽度为375pt
extension UILabel{
@IBInspectable
var scaleSize: CGFloat {
set {
let fontName = self.font.fontName
let screenWidth = UIScreen.main.bounds.size.width
let calculatedFontSize = screenWidth / 375 * newValue
self.font = UIFont(name: fontName, size: calculatedFontSize)
}
get {
return self.scaleSize
}
}
}