SwiftyFitsize 是一个 Swift 的屏幕适配方案。
iOS 9.0+
Xcode 10.0+
Cocoapods
pod ‘SwiftyFitsize’
一、操作符 ~ 与 ≈
~
≈
无论是 ~ 还是 ≈ 对 iPhone 的适配效果是一样的。而对 iPad 而言,iPad 的宽度太大,使用 ≈ 还是会按宽度比例进行运算,就会显示特别臃肿,这时使用 ~ 在显示上就会比较合适。 ~ 在 ≈ 的基础上针对 iPad 的适配大小后再去乘上 iPadFitMultiple 。 一般情况下直接使用 ~ 即可。
无论是 ~ 还是 ≈ 对 iPhone 的适配效果是一样的。而对 iPad 而言,iPad 的宽度太大,使用 ≈ 还是会按宽度比例进行运算,就会显示特别臃肿,这时使用 ~ 在显示上就会比较合适。
iPhone
iPad
~ 在 ≈ 的基础上针对 iPad 的适配大小后再去乘上 iPadFitMultiple 。
iPadFitMultiple
一般情况下直接使用 ~ 即可。
~ : 当设备为 iPad 时,适配后的值会与 iPadFitMultiple 相乘
100~ UIFont.systemFont(ofSize: 14)~ CGPoint(x: 10, y: 10)~ CGRect(x: 10, y: 10, width: 100, height: 100)~ UIEdgeInsetsMake(10, 10, 10, 10)~
≈ : (option + x) 适配后的值不会与 iPadFitMultiple 相乘
100≈ UIFont.systemFont(ofSize: 14)≈ CGPoint(x: 10, y: 10)≈ CGRect(x: 10, y: 10, width: 100, height: 100)≈ UIEdgeInsetsMake(10, 10, 10, 10)≈
修改 参照宽度 与 iPadFitMultiple 可以调用以下方法
参照宽度
/// 设置参照的相关参数 /// /// - Parameters: /// - width: 参照的宽度 /// - iPadFitMultiple: iPad 在适配后所得值的倍数 (0 , 1] SwiftyFitsize.reference(width: 414, iPadFitMultiple: 0.5)
二、支持 xib 和 storyboard
enum SwiftyFitType: Int { /// Original Value case none = 0 /// ~ case flexible = 1 /// ≈ case force = 2 }
支持的UI控件有: UILabel UIButton UITextView UITextField
UILabel
UIButton
UITextView
UITextField
FontFitType 的值请参考上方的 enum SwiftyFitType
FontFitType
enum SwiftyFitType
约束适配同上
iPad 关于 ~ 与 ≈ 在使用上的对比
三、Objective-C
由于 OC 不支持运算符重载,所以只能用宏来适配。 Xib 和 Storyboard 则跟上方提及的使用方式相同。
由于 OC 不支持运算符重载,所以只能用宏来适配。
OC
Xib 和 Storyboard 则跟上方提及的使用方式相同。
Xib
Storyboard
修改 参照宽度 与 iPadFitMultiple
[SwiftyFitsize referenceWithWidth:414 iPadFitMultiple:0.6];
UIFont *font = [UIFont systemFontOfSize:14];
UIFont font1 = font.sf; UIFont font2 = SF_Font(font);
CGFloat num = SF_Float(14); CGPoint point = SF_Point(CGPointMake(10, 10)); CGSize size = SF_Size(CGSizeMake(100, 100)); CGRect rect = SF_Rect(CGRectMake(10, 10, 100, 100)); UIEdgeInsets edge = SF_EdgeInsets(UIEdgeInsetsMake(0, 0, 100, 100));
UIFont font1 = font.sfz; UIFont font2 = SFZ_Font(font);
CGFloat num = SFZ_Float(14); CGPoint point = SFZ_Point(CGPointMake(10, 10)); CGSize size = SFZ_Size(CGSizeMake(100, 100)); CGRect rect = SFZ_Rect(CGRectMake(10, 10, 100, 100)); UIEdgeInsets edge = SFZ_EdgeInsets(UIEdgeInsetsMake(0, 0, 100, 100));