美文网首页摄影漫画手绘
使用xib或storyboard等比适配屏幕尺寸(按设置的宏定义

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

作者: 心猿意码_ | 来源:发表于2022-03-28 11:09 被阅读0次
    • 本文章适用于使用xib或者storyboard开发过程中,控件根据自己的宏定义的比例处理控件尺寸等比,话不多说,先看效果,再上代码。

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


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

    首先创建一个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


    控件.jpeg

    在8的机型上是100


    8.jpeg

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

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

    xib的UIFont适配在这里

    相关文章

      网友评论

        本文标题:使用xib或storyboard等比适配屏幕尺寸(按设置的宏定义

        本文链接:https://www.haomeiwen.com/subject/lhqpjrtx.html