我正在使用UILabel Custom类,UILabel扩展和UIDevice扩展作为通用解决方案在 Swift 3+ 中的项目中处理它 .
获取 screenType 的UIDevice扩展:
public extension UIDevice {
var iPhone: Bool {
return UIDevice().userInterfaceIdiom == .phone
}
enum ScreenType: String {
case iPhone4
case iPhone5
case iPhone6
case iPhone6Plus
case iPhoneX
case Unknown
}
var screenType: ScreenType {
guard iPhone else { return .Unknown}
switch UIScreen.main.nativeBounds.height {
case 960:
return .iPhone4
case 1136:
return .iPhone5
case 1334:
return .iPhone6
case 2208:
return .iPhone6Plus
case 2436:
return .iPhoneX
default:
return .Unknown
}
}
}
extension UIDevice {
enum DeviceTypes {
case iPhone4_4s
case iPhone5_5s
case iPhone6_6s
case iPhone6p_6ps
case after_iPhone6p_6ps
}
static var deviceType : DeviceTypes {
switch UIScreen.main.height {
case 480.0:
return .iPhone4_4s
case 568.0:
return .iPhone5_5s
case 667.0:
return .iPhone6_6s
case 736.0:
return .iPhone6p_6ps
default:
return .after_iPhone6p_6ps
}
}
}
Int Extension:
extension Int{
var fontSize : CGFloat {
var deltaSize : CGFloat = 0;
switch (UIDevice.deviceType) {
case .iPhone4_4s,
.iPhone5_5s :
deltaSize = -1;
case .iPhone6_6s :
deltaSize = 2;
case .iPhone6p_6ps :
deltaSize = 2;
default:
deltaSize = 0;
}
let selfValue = self;
return CGFloat(selfValue) + deltaSize;
}
}
7 回答
Edit :当新设备问世时,我不能很好地扩展 . 使用动态字体大小和特定于大小类的字体的组合 .
假设有一个新的iPhone型号出现,如果您使用自动布局和大小类,则不必手动修复所有约束以使您的应用与此新设备兼容 . 但是,您仍然可以使用以下代码设置
UILabel
的字体大小:我正在使用UILabel Custom类,UILabel扩展和UIDevice扩展作为通用解决方案在 Swift 3+ 中的项目中处理它 .
获取
screenType
的UIDevice扩展:以下是使用
screenType
调整字体大小的UILabel扩展 . 也可以在UILabel自定义类中添加adjustsFontSizeToFitDevice
方法,但我已将其放在UILabel扩展中,以使其可从所有类型的UILabel实例访问 .adjustsFontSizeToFitDevice
方法中使用的常量"2"可以更改为任何所需的数字 . 我的逻辑是将iPhone 6/7/8视为默认分辨率,并为该分辨率的每个标签提供合适的字体大小(在故事板中) . 然后,我为iPhone X和iPhone 6/7/8 Plus增加了2分,而为iPhone 4/5减去了2分 .最后是一个UILabel自定义类,用于将字体调整应用于从
MyCustomLabel
中细分的所有标签 .Usage: 在Storyboard中,子类来自
MyCustomLabel
的所有UILabel实例,其字体大小需要根据设备大小进行调整 .You can achieve desired effect as below.
Usage : 而不是使用14作为字体大小 you can use 14.fontSize ,它将根据设备更改,取决于您的delta值 .
用法:
UIFont.font_medium(12.fontSize)
UIFont extension:
UIDevice Extension:
Int Extension:
两种方式:
1)在app delegate中手动创建一个方法,共享它的对象和调用方法 .
例如:
2)在每个UI项目上,转到属性检查器,声明一个字体 .
(字体大小字段左侧有一个符号可见 . 单击它,选择匹配的大小类并声明字体大小 . )
第二种选择对我来说很方便 . 快乐的编码!
不是为每个标签编写代码,而是按照以下方式执行 extend your label class with Your custom label class ,它将根据设备分辨率比例因子自动缩放:
这就是我做的方式 . 它写在 Swift 4 :)
用法:
myawesomeLabel.adjustFontSizeForDevice()
像这样创建,
在那之后你想要改变标签字体,我们可以编写简单的Switch case