第十六章 编码方式实现auto layout
来源:互联网 发布:javascript 或运算 编辑:程序博客网 时间:2024/06/10 22:12
一,介绍
1,在loadView回调中创建布局;
如果使用nib创建布局,但是需要在代码中修改,可以在viewDidLoad中修改。
2,使用Visual Format Language(VFL)语言写布局限制
二,vfl语法
1,一条语句可以对应多个选项, 比如左右
2,一条语句只能对应一个方向,即是水平和垂直的都要分成2条语句
3,@"H:|-0-[imageView]-0-|" H:代表水平方向; |代表Imageview的container, -0-即是设置的大小;
也可以省略为@"H:|[imageView]|"
4,@"V:[dateLabel]-8-[imageView]-8-[toolbar]" 垂直方向设置间距
5,设置固定数值的方法 @"V:[someView(==50)]" 即是设置高度为50
三,创建布局限制
1,使用constraintsWithVisualFormat方法添加
2,第一个参数添加vfl语句
3,第二、三个参数暂时可以忽略
4,第四个参数指定在vfl中的对象名和对象之间的关系;
- (void)viewDidLoad{[super viewDidLoad];...NSDictionary *nameMap = @{@"imageView" : self.imageView,@"dateLabel" : self.dateLabel,@"toolbar" : self.toolbar};// imageView is 0 pts from superview at left and right edgesNSArray *horizontalConstraints =[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[imageView]-0-|"options:0metrics:nilviews:nameMap];// imageView is 8 pts from dateLabel at its top edge...// ... and 8 pts from toolbar at its bottom edgeNSArray *verticalConstraints =[NSLayoutConstraint constraintsWithVisualFormat:@"V:[dateLabel]-[imageView]-[toolbar]"options:0metrics:nilviews:nameMap];}
四,添加布局限制
布局约束应该添加到哪个view? 一般来将,就是布局约束中所有view的最近父view节点;
如果约束中只有一个view,那约束就加到自己;
1,发送addConstraints:消息添加布局约束
五,Intrinsic Content Size view本身大小对布局约束的影响
1,image view本身的图片大小会影响布局约束
2,可以设置压缩和放大的优先级系数,当为1000的时候,不允许布局约束改变大小
3,当添加一个优先级较低的小图片到布局中时,会导致另外一个优先级较高的view改变大小
六,其他方式
有些情况下,无法使用vfl语句创建布局约束,比如图片的宽度是高度的1.5倍,这时可以使用NSLayoutConstraint来创建布局之间的相对关系;
NSLayoutConstraint *aspectConstraint =[NSLayoutConstraint constraintWithItem:self.imageViewattribute:NSLayoutAttributeWidthrelatedBy:NSLayoutRelationEqualtoItem:self.imageViewattribute:NSLayoutAttributeHeightmultiplier:1.5constant:0.0];
其他的attribute是常量,代表某个布局; relateBy的NSLayoutRelationEqual是指等于; multiplier代表倍数;
同样你需要把布局约束加到view中:[self.imageView addConstraint:aspectConstraint];
七,NSAutoresizingMaskLayoutConstraint
在出现autolayout之前,ios使用NSAutoresizingMaskLayoutConstraint,它创建了view和父view之间的关系;
但它会导致和autolayout之间的冲突;
解决方式是关闭NSAutoresizingMaskLayoutConstraint;
- 第十六章 编码方式实现auto layout
- 以编码的方式实现Auto Layout自动布局
- iOSLearningDiary以编码的方式实现Auto Layout自动布局
- 以编码的方式实现Auto Layout自动布局(一)
- 以编码的方式实现Auto Layout自动布局(二)
- 以编码的方式实现Auto Layout自动布局(一)
- 以编码的方式实现Auto Layout自动布局(二)
- iOS学习笔记02——以编码的方式实现Auto Layout自动布局(一)
- iOS学习笔记03——以编码的方式实现Auto Layout自动布局(二)
- iOS学习笔记02——以编码的方式实现Auto Layout自动布局(一)
- iOS学习笔记03——以编码的方式实现Auto Layout自动布局(二)
- iOS学习笔记02——以编码的方式实现Auto Layout自动布局(一)
- iOS学习笔记03——以编码的方式实现Auto Layout自动布局(二)
- iOS学习笔记02——以编码的方式实现Auto Layout自动布局(一)
- Auto Layout— 实现等分
- 第三章 :介绍 Auto Layout
- 使用auto layout 实现cell适配
- 使用Auto Layout-代码实现自动布局
- Ubuntu16.04 关闭apache/mysql/php的开机启动
- Unity3D 网络通信_HTTP协议:获取网络图片、内容
- js跳转页面
- springMVC两种方式实现多文件上传及效率比较
- JVM学习笔记(三)------内存管理和垃圾回收
- 第十六章 编码方式实现auto layout
- 深究AngularJS——校验(非form表单)
- Android:Sqlite的使用
- 高效开发Android App的10个建议
- 用Java swing制作简单记事本
- 浏览器主页被流氓插件劫持,打开浏览器主页被篡改
- 转发重定向的区别
- 20个正则表达式
- [从头学声学] 第214节 声音的升频