博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS编程(双语版)-视图-Autolayout代码初步
阅读量:6192 次
发布时间:2019-06-21

本文共 4717 字,大约阅读时间需要 15 分钟。

一谈到Autolayout,初学者肯定想到的是IB中使用拖拽啊,pin啊各种鼠标操作来进行添加各种约束。

今天我们要聊得是如何利用代码来添加视图间的约束。

我们来看一个例子:

(Objective-C代码)

UIView* v1 = [[UIView alloc] initWithFrame:CGRectMake(100, 111, 132, 194)];v1.backgroundColor = [UIColor colorWithRed:1 green:.4 blue:1 alpha:1];UIView* v2 = [UIView new];v2.backgroundColor = [UIColor colorWithRed:.5 green:1 blue:0 alpha:1];UIView* v3 = [UIView new];v3.backgroundColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:1];[mainview addSubview: v1];[v1 addSubview: v2];[v1 addSubview: v3];v2.translatesAutoresizingMaskIntoConstraints = NO;v3.translatesAutoresizingMaskIntoConstraints = NO;[v1 addConstraint:    [NSLayoutConstraint        constraintWithItem:v2 attribute:NSLayoutAttributeLeft        relatedBy:0        toItem:v1 attribute:NSLayoutAttributeLeft        multiplier:1 constant:0]];        [v1 addConstraint:    [NSLayoutConstraint        constraintWithItem:v2 attribute:NSLayoutAttributeRight        relatedBy:0        toItem:v1 attribute:NSLayoutAttributeRight        multiplier:1 constant:0]];    [v1 addConstraint:    [NSLayoutConstraint        constraintWithItem:v2 attribute:NSLayoutAttributeTop        relatedBy:0        toItem:v1 attribute:NSLayoutAttributeTop        multiplier:1 constant:0]];[v2 addConstraint:    [NSLayoutConstraint        constraintWithItem:v2 attribute:NSLayoutAttributeHeight        relatedBy:0        toItem:nil attribute:0        multiplier:1 constant:10]];[v3 addConstraint:    [NSLayoutConstraint        constraintWithItem:v3 attribute:NSLayoutAttributeWidth        relatedBy:0        toItem:nil attribute:0        multiplier:1 constant:20]];[v3 addConstraint:    [NSLayoutConstraint        constraintWithItem:v3 attribute:NSLayoutAttributeHeight        relatedBy:0        toItem:nil attribute:0        multiplier:1 constant:20]];[v1 addConstraint:    [NSLayoutConstraint        constraintWithItem:v3 attribute:NSLayoutAttributeRight        relatedBy:0        toItem:v1 attribute:NSLayoutAttributeRight        multiplier:1 constant:0]];[v1 addConstraint:    [NSLayoutConstraint        constraintWithItem:v3 attribute:NSLayoutAttributeBottom        relatedBy:0        toItem:v1 attribute:NSLayoutAttributeBottom        multiplier:1 constant:0]];

(Swift代码 iOS9)

let v1 = UIView(frame:CGRectMake(100, 111, 132, 194))v1.backgroundColor = UIColor(red: 1, green: 0.4, blue: 1, alpha: 1)let v2 = UIView()v2.backgroundColor = UIColor(red: 0.5, green: 1, blue: 0, alpha: 1)let v3 = UIView()v3.backgroundColor = UIColor(red: 1, green: 0, blue: 0, alpha: 1)mainview.addSubview(v1)v1.addSubview(v2)v1.addSubview(v3)v2.translatesAutoresizingMaskIntoConstraints = falsev3.translatesAutoresizingMaskIntoConstraints = falsev1.addConstraint(    NSLayoutConstraint(item: v2,        attribute: .Leading,        relatedBy: .Equal,        toItem: v1,        attribute: .Leading,        multiplier: 1, constant: 0))v1.addConstraint(    NSLayoutConstraint(item: v2,        attribute: .Trailing,        relatedBy: .Equal,        toItem: v1,        attribute: .Trailing,        multiplier: 1, constant: 0))v1.addConstraint(    NSLayoutConstraint(item: v2,        attribute: .Top,        relatedBy: .Equal,        toItem: v1,        attribute: .Top,        multiplier: 1, constant: 0))v2.addConstraint(    NSLayoutConstraint(item: v2,        attribute: .Height,        relatedBy: .Equal,        toItem: nil,        attribute: .NotAnAttribute,        multiplier: 1, constant: 10))v3.addConstraint(    NSLayoutConstraint(item: v3,        attribute: .Width,        relatedBy: .Equal,        toItem: nil,        attribute: .NotAnAttribute,        multiplier: 1, constant: 20))v3.addConstraint(    NSLayoutConstraint(item: v3,        attribute: .Height,        relatedBy: .Equal,        toItem: nil,        attribute: .NotAnAttribute,        multiplier: 1, constant: 20))v1.addConstraint(    NSLayoutConstraint(item: v3,        attribute: .Trailing,        relatedBy: .Equal,        toItem: v1,        attribute: .Trailing,        multiplier: 1, constant: 0))v1.addConstraint(    NSLayoutConstraint(item: v3,        attribute: .Bottom,        relatedBy: .Equal,        toItem: v1,        attribute: .Bottom,        multiplier: 1, constant: 0))

运行效果:

(竖屏)

(横屏)

 看了以上代码后,你肯定要疯了,那么多约束。。。

下面,我们就来逐一分析:

 我们先来看一下这段代码

OC

v3 = [[UIView alloc] initWithFrame:CGRectMake(v1.bounds.size.width-20,    v1.bounds.size.height-20,    20, 20)];

Swift

let v3 = UIView(frame:CGRectMake(    v1.bounds.width-20, v1.bounds.height-20, 20, 20))

 这段代码很清楚地表达了:v3是宽高各20,并且位置在v1的右下角,其原点距离v1的右下角

坐标x,y各偏移20,也就是我们上图中看到的大红色矩形。

 

约束的API语句有时候是很冗长的,看上去很难懂。

为此,Apple发明了可视化格式(Visual Format)来便于理解。

看看下面的这个例子:

@"V:|[v2(10)]"

上面的表达式中,V:表示是垂直方向上的约束,同理,H:表示水平方向上约束。

管道符|代表父视图。

中括号内是要添加约束的视图变量名。

所以,这里的约束清晰地表达: v2和父视图顶端对齐,并且v2的高度是10。

 

转载地址:http://xjgda.baihongyu.com/

你可能感兴趣的文章
三星拟调整卖场产品比例发力3D和Smart
查看>>
使用Fluentd和MongoDB构建日志收集系统
查看>>
js实现复制到剪切板,兼容所有浏览器
查看>>
postgresql自增字段初始值的设定
查看>>
H3C设备之端口绑定
查看>>
备忘:学习phalcon api方法
查看>>
wmic教程 命令收集
查看>>
MySQL MyISAM/InnoDB高并发优化经验
查看>>
Install Oracle Java Runtime (JRE) 7 in Ubuntu 1...
查看>>
动态规划的基本方法---动态规划和静态规划的关系
查看>>
Spring aop 内部调用、自调用不生效问题与解决方案
查看>>
js控制滚动条
查看>>
jquary autocomplete 实现qq邮箱收件人
查看>>
【转】SpringMVC、Spring的Bean
查看>>
设计模式(三)Java语言的接口和抽象类
查看>>
Universal-Image-Loader的使用
查看>>
mysql索引的要点分析
查看>>
linux 二进制格式化命令
查看>>
php 中?? 和 ?: 的区别 isset empty
查看>>
CAS增加免登陆(Remember Me)功能
查看>>