如何在 Xcode 故事板中添加有关多设备的动态字体大小
How To Add Dynamic Font Size about Multi Device in Xcode Story Board
我在 storyBoard 中添加了 autoLayout (w: Any, h: Any)
但是由于字体大小是固定的,所有设备的字体大小都是一样的
(4, 4.7, 5.5 英寸)
4寸好看。但是在5.5寸,太小了
我想在任何设备上动态增加和减少 UIlabel 字体大小。
有什么想法吗?
在 xcode 7.3 中,您可以在属性检查器中单击添加“+”到每个设备的 select 字体大小
不,您不能只为 iPhone 5.5 配置大小 class。尺码class分不清iPhone5、6 vs 6Plus
只有 1 个边缘案例支持 iPhone 5.5 横向:
regular width, compact height: 5.5" iPhone in Landscape
您唯一可以做到的方法是在您的代码中检查设备大小!
检查屏幕大小并根据它操作字体大小:
let screenSize = UIScreen.mainScreen().bounds.size
if screenSize.height < 568 {
//Set font size for 4
} else if screenSize.height < 568 {
//Set font size for 5
} else if screenSize.height < 568 {
//Set font size for 6
} else {
//Set font size for 6+
}
更新:
扩展 UILabel class 以设置您的标签:
extension UILabel {
func setupLabelDynamicSize(size size:CGFloat) {
let screenSize = UIScreen.mainScreen().bounds.size
if screenSize.height < 568 {
//Set self.font equal size
} else if screenSize.height < 568 {
//Set self.font equal size + 1
} else if screenSize.height < 568 {
//Set self.font equal size + 2
} else {
//Set self.font equal size + 3
}
}
}
然后,无论您有想要动态大小的标签,只需调用:
labelObject.setupLabelForDynamicSize(size: 14)
我找到了解决方案
我做了一个Class
class UILabelDeviceClass : UILabel {
@IBInspectable var iPhoneFontSize:CGFloat = 0 {
didSet {
overrideFontSize(iPhoneFontSize)
}
}
func overrideFontSize(fontSize:CGFloat){
let currentFontName = self.font.fontName
var calculatedFont: UIFont?
let bounds = UIScreen.mainScreen().bounds
let height = bounds.size.height
switch height {
case 480.0: //Iphone 3,4,SE => 3.5 inch
calculatedFont = UIFont(name: currentFontName, size: fontSize * 0.7)
self.font = calculatedFont
break
case 568.0: //iphone 5, 5s => 4 inch
calculatedFont = UIFont(name: currentFontName, size: fontSize * 0.8)
self.font = calculatedFont
break
case 667.0: //iphone 6, 6s => 4.7 inch
calculatedFont = UIFont(name: currentFontName, size: fontSize * 0.9)
self.font = calculatedFont
break
case 736.0: //iphone 6s+ 6+ => 5.5 inch
calculatedFont = UIFont(name: currentFontName, size: fontSize)
self.font = calculatedFont
break
default:
print("not an iPhone")
break
}
}
}
然后,设置Class
然后,设置值
编码愉快!
我在 storyBoard 中添加了 autoLayout (w: Any, h: Any)
但是由于字体大小是固定的,所有设备的字体大小都是一样的 (4, 4.7, 5.5 英寸)
4寸好看。但是在5.5寸,太小了
我想在任何设备上动态增加和减少 UIlabel 字体大小。
有什么想法吗?
在 xcode 7.3 中,您可以在属性检查器中单击添加“+”到每个设备的 select 字体大小
不,您不能只为 iPhone 5.5 配置大小 class。尺码class分不清iPhone5、6 vs 6Plus
只有 1 个边缘案例支持 iPhone 5.5 横向:
regular width, compact height: 5.5" iPhone in Landscape
您唯一可以做到的方法是在您的代码中检查设备大小!
检查屏幕大小并根据它操作字体大小:
let screenSize = UIScreen.mainScreen().bounds.size
if screenSize.height < 568 {
//Set font size for 4
} else if screenSize.height < 568 {
//Set font size for 5
} else if screenSize.height < 568 {
//Set font size for 6
} else {
//Set font size for 6+
}
更新:
扩展 UILabel class 以设置您的标签:
extension UILabel {
func setupLabelDynamicSize(size size:CGFloat) {
let screenSize = UIScreen.mainScreen().bounds.size
if screenSize.height < 568 {
//Set self.font equal size
} else if screenSize.height < 568 {
//Set self.font equal size + 1
} else if screenSize.height < 568 {
//Set self.font equal size + 2
} else {
//Set self.font equal size + 3
}
}
}
然后,无论您有想要动态大小的标签,只需调用:
labelObject.setupLabelForDynamicSize(size: 14)
我找到了解决方案
我做了一个Class
class UILabelDeviceClass : UILabel {
@IBInspectable var iPhoneFontSize:CGFloat = 0 {
didSet {
overrideFontSize(iPhoneFontSize)
}
}
func overrideFontSize(fontSize:CGFloat){
let currentFontName = self.font.fontName
var calculatedFont: UIFont?
let bounds = UIScreen.mainScreen().bounds
let height = bounds.size.height
switch height {
case 480.0: //Iphone 3,4,SE => 3.5 inch
calculatedFont = UIFont(name: currentFontName, size: fontSize * 0.7)
self.font = calculatedFont
break
case 568.0: //iphone 5, 5s => 4 inch
calculatedFont = UIFont(name: currentFontName, size: fontSize * 0.8)
self.font = calculatedFont
break
case 667.0: //iphone 6, 6s => 4.7 inch
calculatedFont = UIFont(name: currentFontName, size: fontSize * 0.9)
self.font = calculatedFont
break
case 736.0: //iphone 6s+ 6+ => 5.5 inch
calculatedFont = UIFont(name: currentFontName, size: fontSize)
self.font = calculatedFont
break
default:
print("not an iPhone")
break
}
}
}
然后,设置Class
然后,设置值
编码愉快!