时间:2021-05-20
关于iOS布局自动iPhone6之后就是AutoLayOut,AutoLayOut固然非常好用,不过有时候我们需要在页面手动进行页面布局,VFL算是一种选择,而且VFL不复杂,理解起来很容易,实际开发中用的特别熟还好,要是第一次看估计要花点功夫才能搞定。Masonry算是VFL的简化版,用的人比较多,之前项目中用过一次,对手动写页面的开发来说算是福利。
基础知识
首先我们看一个常见的问题将一个子View放在的UIViewController的某个位置,通过设置边距来实现,效果如下:
如果通过VFL我们代码会是这样的:
UIView *superview = self.view;UIView *view1 = [[UIView alloc] init];view1.translatesAutoresizingMaskIntoConstraints = NO;view1.backgroundColor = [UIColor redColor];[superview addSubview:view1];UIEdgeInsets padding = UIEdgeInsetsMake(200, 50, 200, 50);[superview addConstraints:@[//约束[NSLayoutConstraint constraintWithItem:view1attribute:NSLayoutAttributeToprelatedBy:NSLayoutRelationEqualtoItem:superviewattribute:NSLayoutAttributeTopmultiplier:1.0constant:padding.top],[NSLayoutConstraint constraintWithItem:view1attribute:NSLayoutAttributeLeftrelatedBy:NSLayoutRelationEqualtoItem:superviewattribute:NSLayoutAttributeLeftmultiplier:1.0constant:padding.left],[NSLayoutConstraint constraintWithItem:view1attribute:NSLayoutAttributeBottomrelatedBy:NSLayoutRelationEqualtoItem:superviewattribute:NSLayoutAttributeBottommultiplier:1.0constant:-padding.bottom],[NSLayoutConstraint constraintWithItem:view1attribute:NSLayoutAttributeRightrelatedBy:NSLayoutRelationEqualtoItem:superviewattribute:NSLayoutAttributeRightmultiplier:1constant:-padding.right],]];只是简单的设置了一个边距,如果视图的关系比较复杂,维护起来会是一个很痛苦的事情,我们看一下Masonry是如何实现的,导入Masonry.h头文件,约束的代码:
UIView *childView=[UIView new];[childView setBackgroundColor:[UIColor redColor]];//先将子View加入在父视图中[self.view addSubview:childView];__weak typeof(self) weakSelf = self;UIEdgeInsets padding = UIEdgeInsetsMake(200, 50, 200, 50);[childView mas_makeConstraints:^(MASConstraintMaker *make) {make.edges.equalTo(weakSelf.view).with.insets(padding);}];通过mas_makeConstraints设置边距有种鸟枪换炮的感觉,我们即将开启一段新的旅程,可以紧接着看下面比较实用的功能~
实用知识
1.View设置大小
UIView *childView=[UIView new];[childView setBackgroundColor:[UIColor redColor]];//先将子View加入在父视图中[self.view addSubview:childView];__weak typeof(self) weakSelf = self;[childView mas_makeConstraints:^(MASConstraintMaker *make) {//设置大小make.size.mas_equalTo(CGSizeMake(100, 100));//居中make.center.equalTo(weakSelf.view);}];效果如下:
这里友情其实一个小内容,目前我们设置约束都是通过mas_makeConstraints用来创建约束,mas_updateConstraints用来更新约束,mas_remakeConstraints重置约束,清除之前的约束,保留最新的约束,如果想深入解释下,可以阅读下面的英文解释~
/*** Creates a MASConstraintMaker with the callee view.* Any constraints defined are added to the view or the appropriate superview once the block has finished executing** @param block scope within which you can build up the constraints which you wish to apply to the view.** @return Array of created MASConstraints*/- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;/*** Creates a MASConstraintMaker with the callee view.* Any constraints defined are added to the view or the appropriate superview once the block has finished executing.* If an existing constraint exists then it will be updated instead.** @param block scope within which you can build up the constraints which you wish to apply to the view.** @return Array of created/updated MASConstraints*/- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;/*** Creates a MASConstraintMaker with the callee view.* Any constraints defined are added to the view or the appropriate superview once the block has finished executing.* All constraints previously installed for the view will be removed.** @param block scope within which you can build up the constraints which you wish to apply to the view.** @return Array of created/updated MASConstraints*/- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;2.设置高度,这里设置左右边距,因此不设置宽度,如果想单独设置width可参考高度的设置方式:
UIView *childView=[UIView new];[childView setBackgroundColor:[UIColor greenColor]];//先将子View加入在父视图中[self.view addSubview:childView];__weak typeof(self) weakSelf = self;[childView mas_makeConstraints:^(MASConstraintMaker *make) {//距离顶部44make.top.equalTo(weakSelf.view.mas_top).with.offset(44);//距离左边30make.left.equalTo(weakSelf.view.mas_left).with.offset(30);//距离右边30,注意是负数make.right.equalTo(weakSelf.view.mas_right).with.offset(-30);//高度150make.height.mas_equalTo(@150);}];3.子视图之间的位置设置:
UIView *childView=[UIView new];[childView setBackgroundColor:[UIColor greenColor]];//先将子View加入在父视图中[self.view addSubview:childView];__weak typeof(self) weakSelf = self;[childView mas_makeConstraints:^(MASConstraintMaker *make) {//距离顶部44make.top.equalTo(weakSelf.view.mas_top).with.offset(44);//距离左边30make.left.equalTo(weakSelf.view.mas_left).with.offset(30);//距离右边30,注意是负数make.right.equalTo(weakSelf.view.mas_right).with.offset(-30);//高度150make.height.mas_equalTo(@150);}];//地址:http:///xiaofeixiang/UIView *nextView=[UIView new];[nextView setBackgroundColor:[UIColor redColor]];[self.view addSubview:nextView];[nextView mas_makeConstraints:^(MASConstraintMaker *make) {make.top.equalTo(childView.mas_bottom).with.offset(30);make.right.equalTo(childView.mas_right).with.offset(-30);make.width.mas_equalTo(@100);make.height.mas_equalTo(@100);}];4.链式写法,算是一个便利的写法:
UIView *childView=[UIView new];[childView setBackgroundColor:[UIColor greenColor]];//先将子View加入在父视图中[self.view addSubview:childView];__weak typeof(self) weakSelf = self;[childView mas_makeConstraints:^(MASConstraintMaker *make) {make.top.and.left.mas_equalTo(weakSelf.view).with.offset(100);make.bottom.and.right.mas_equalTo(weakSelf.view).with.offset(-100);//第二种写法更简单,相对于就是父视图// make.top.and.left.mas_equalTo(100);// make.bottom.and.right.mas_equalTo(-100);}];UILabel *label=[UILabel new];[label setText:@"博客园-FlyElephant"];[label setTextColor:[UIColor redColor]];[label setTextAlignment:NSTextAlignmentCenter];[self.view addSubview:label];[label mas_makeConstraints:^(MASConstraintMaker *make) {make.left.mas_equalTo(weakSelf.view).with.offset(10);make.height.mas_equalTo(20);make.right.mas_equalTo(weakSelf.view).with.offset(-10);make.bottom.mas_equalTo(weakSelf.view).with.offset(-50);}];网上关于Masonry的教程很多,给的例子的也很多,这几种情况基本上满足了开发中的需求,不会有太多的出入,算是一个简易版的教程,Masonry的中属性和iOS中的属性是有对应的关系,不过因为很简单,基本上没怎么看,下图是一个对照关系:
总结:
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
javascript中setTimeout使用指南/*//方法1functionslows(){alert("15S后弹出!");}setTimeout("sl
这里我们使用dnsmasq对应的docker版本docker-dnsmasq。使用指南下载镜像dockerpulldocker-dnsmasq创建最简单的配置/
Docker-clientforpython使用指南:客户端初始化的三种方法importdockerdocker.api()docker.APIClient()
写好review,需要注意以下几点:测评对产品的包装、规格、结构整体性描述产品与众不同的亮点产品的缺点产品使用指南(来源:深圳拓扑)
本经验教你怎样使用CAD插件自动画杆路插件使用指南。 1、下载解压Autolisp插件至电脑D盘根目录下即可。 2、打开AotoCAD,如下图: 3、