- 本文章适用于使用xib或者storyboard开发过程中,控件根据自己的宏定义的比例处理控件尺寸等比,话不多说,先看效果,再上代码。
这里既是效果也是使用方法(先选中约束的线条,然后打开自定义的又上角开关)
首先创建一个NSLayoutConstraint+BSIBDesignable.h的分类
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface NSLayoutConstraint (BSIBDesignable)
@property(nonatomic, assign) IBInspectable BOOL adapterScreen;
@end
NS_ASSUME_NONNULL_END
NSLayoutConstraint+BSIBDesignable.m
#import "NSLayoutConstraint+BSIBDesignable.h"
#import <objc/runtime.h>
// 基准屏幕宽度
#define kRefereWidth 375.0
// 以屏幕宽度为固定比例关系,来计算对应的值。假设:基准屏幕宽度375,floatV=10;当前屏幕宽度为750时,那么返回的值为20
#define AdaptW(floatValue) (floatValue*[[UIScreen mainScreen] bounds].size.width/kRefereWidth)
@implementation NSLayoutConstraint (BSIBDesignable)
//定义常量 必须是C语言字符串
static char *AdapterScreenKey = "AdapterScreenKey";
- (BOOL)adapterScreen{
NSNumber *number = objc_getAssociatedObject(self, AdapterScreenKey);
return number.boolValue;
}
- (void)setAdapterScreen:(BOOL)adapterScreen {
NSNumber *number = @(adapterScreen);
objc_setAssociatedObject(self, AdapterScreenKey, number, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
if (adapterScreen){
self.constant = AdaptW(self.constant);
}
}
@end
最后给大家看下不同机型下此button的宽度
在13pro机型上宽度是104
在8的机型上是100
以上是整体使用、实现、效果,因为在代码里面定义的等比适配基准机型是8(宽度375),基准屏宽度的定义取决于UI出的尺寸图是按什么机型出的,UI按什么机型出,基准屏幕的尺寸定义就对应什么机型的宽度就好。