目前在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,请及时联系我哦~~
时间: 2024-10-13 01:52:24