首页 > 代码库 > iOS_关于封装AutoLayout的框架ZLAutoLayout

iOS_关于封装AutoLayout的框架ZLAutoLayout

目前在iOS开发中,越来越多的不同尺寸的屏幕,让屏幕适配成为开发要点。

回顾之前的开发中,我们要么是用xib,要么用代码编写控件,需要拉伸则设置View的autoresizingMask里面的枚举值来进行设置拉伸属性。

这些都是绝对布局。

而AutoLayout的优势在那呢?

AutoLayout是相对布局,也可以绝对布局。

什么是相对又什么是绝对呢?

相对是指,可以有参照点(View)来进行对它参考点进行约束。

绝对是指,只针对父View来进行布局排版,不能根据兄弟View来进行布局。



网上的AutoLayout教程已经非常之多。

那么我现在想讲的是ZLAutoLayout的框架,我自己抽空封装下,如果存有bug,请及时反馈~~


代码+示例程序的gitHub地址:https://github.com/MakeZL/ZLAutoLayout

底层也是封装了AutoLayout的API,只不过写起来要简单快速很多。

只需要把分类文件导入到项目里即可。


-----

常用的几个方法

-----

// 相对父视图来进行约束,比如view.left = view.superview.left + 可选的inset.

- (void)autoPinSuperViewDirection:(ZLAutoLayoutDirection)direction;

- (void)autoPinSuperViewDirection:(ZLAutoLayoutDirection)direction withInset:(CGFloat)inset;



// view对view进行约束,比如aView.left = bView.left + 可选的multiplier + inset.

- (void)autoPinDirection:(ZLAutoLayoutDirection)direction toPinDirection:(ZLAutoLayoutDirection)toDircetion ofView:(UIView *)view;

- (void)autoPinDirection:(ZLAutoLayoutDirection)direction toPinDirection:(ZLAutoLayoutDirection)toDircetion ofView:(UIView *)view withInset:(CGFloat)inset;

- (void)autoPinDirection:(ZLAutoLayoutDirection)direction toPinDirection:(ZLAutoLayoutDirection)toDircetion ofView:(UIView *)ofView multiplier:(CGFloat)multiplier withInset:(CGFloat)inset;

// 设置view的尺寸,宽高或者宽于高

- (void)autoSetViewSize:(CGSize)size;

- (void)autoSetViewSizeWidthOrHeight:(ZLAutoLayoutSize)alSize withInset:(CGFloat)inset;

// view相对superView的垂直方向

- (void)autoSetAlignToSuperView:(ZLAutoLayoutAlign)align;

- (void)autoSetAlignToSuperView:(ZLAutoLayoutAlign)align withInset:(CGFloat)inset;

// view相对view的垂直方向 + 可选的inset

- (void)autoSetAlign:(ZLAutoLayoutAlign)align ofView:(UIView *)ofView;

- (void)autoSetAlign:(ZLAutoLayoutAlign)align ofView:(UIView *)ofView withInset:(CGFloat)inset;

// 让view与superView的约束一样

- (void)autoEqualToSuperViewAutoLayouts;

---- 部分代码实例 ----

两个View相对布局


// 实例两个View
    UIView *redView = [UIView instanceAutoLayoutView];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];
    
    UIView *blueView = [UIView instanceAutoLayoutView];
    blueView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:blueView];
    
    // 相对父控件的Left/Top
    [redView autoPinSuperViewDirection:ZLAutoLayoutDirectionLeft];
    [redView autoPinSuperViewDirection:ZLAutoLayoutDirectionTop];
    // 设置redView的宽为100,高为200
    [redView autoSetViewSize:CGSizeMake(100, 200)];
    
    // 设置blueView的宽跟高跟redView相同
    [blueView autoSetViewSizeWidthOrHeight:ZLAutoLayoutSizeHeight ofView:redView];
    [blueView autoSetViewSizeWidthOrHeight:ZLAutoLayoutSizeWidth ofView:redView];
    // 设置blueView的Top与Left相对redView来布局
    [blueView autoPinDirection:ZLAutoLayoutDirectionTop toPinDirection:ZLAutoLayoutDirectionBottom ofView:redView withInset:20];
    [blueView autoPinDirection:ZLAutoLayoutDirectionLeft toPinDirection:ZLAutoLayoutDirectionLeft ofView:redView];


运行效果

技术分享


代码是个人封装,如果存在bug,请及时联系我哦~~


iOS_关于封装AutoLayout的框架ZLAutoLayout