使用xib或storyboard等比适配屏幕尺寸(按设置的宏定义比例适配)

  • 本文章适用于使用xib或者storyboard开发过程中,控件根据自己的宏定义的比例处理控件尺寸等比,话不多说,先看效果,再上代码。

这里既是效果也是使用方法(先选中约束的线条,然后打开自定义的又上角开关)


Mar-28-2022 10-52-29.gif

首先创建一个NSLayoutConstraint+BSIBDesignable.h的分类

#import 

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 

// 基准屏幕宽度
#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


控件.jpeg

在8的机型上是100


8.jpeg

以上是整体使用、实现、效果,因为在代码里面定义的等比适配基准机型是8(宽度375),基准屏宽度的定义取决于UI出的尺寸图是按什么机型出的,UI按什么机型出,基准屏幕的尺寸定义就对应什么机型的宽度就好。

因为在实际开发过程中,有的页面需要等比适配,有的则不需要,所以在xib中做成了开关的属性,默认情况下是关闭的(不做等比适配)

xib的UIFont适配在这里

你可能感兴趣的:(使用xib或storyboard等比适配屏幕尺寸(按设置的宏定义比例适配))