自动适配之LayoutConstriant代码适配
2016-01-26 22:49
246 查看
代码如下:
- (void)viewDidLoad
{
[super
viewDidLoad];
self.title =
@"NSLayoutConstraint适配";
//创建imgView1
imgView1 = [[UIImageView
alloc] init];
imgView1.image = [UIImage
imageNamed:@"1"];
[self.view
addSubview:imgView1];
//创建imgView2
imgView2 = [[UIImageView
alloc] init];
imgView2.image = [UIImage
imageNamed:@"3"];
[self.view
addSubview:imgView2];
//不对imgView1使用autoResizing(使用autolayout就不能使用autoResizing)
imgView1.translatesAutoresizingMaskIntoConstraints =
NO;
imgView2.translatesAutoresizingMaskIntoConstraints =
NO;
[self
addMyLayoutConstriant];
}
#pragma mark 代码添加约束
- (void)addMyLayoutConstriant
{
//代码创建约束
//NSLayoutConstraint 是创建约束对象的类名
/************imgView1*************/
//创建imgView1的上边的约束
//第一个参数:要约束的视图对象(也就是要对哪一个视图添加约束)
//第二个参数:要添加的约束的属性类型,(也就是要添加的是上
下 左 右
宽 高 等这些属性)
//第三个参数:相对关系,分为
等于 小于 大于
//第四个参数:相对于哪一个视图对象
//第五个参数:相对视图的哪一个属性
,比如 上 下。。。
//第六个参数:乘数
倍数,(也就是第一个视图的属性值是第二个视图属性值得倍数)通常是1.0
//第七个参数:常量
/*
以上几个参数 综合起来组成了一个表达式:
item1的属性值 =/<=/>=
第二个视图的属性值 * multiplier + constant
即:第一个视图的属性值 =/<=/>=
第二个视图的属性值 * 倍数 + 常量
*/
//上约束 20
NSLayoutConstraint *imgView1Top = [NSLayoutConstraint
constraintWithItem:imgView1
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual toItem:self.view
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:84];
//添加约束,约束添加在父视图上,因为布局是相对于父视图来布局
[self.view
addConstraint:imgView1Top];
//左约束 20
NSLayoutConstraint *imgView1Left = [NSLayoutConstraint
constraintWithItem:imgView1
attribute:NSLayoutAttributeLeft
relatedBy:0
toItem:self.view
attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:20];
[self.view
addConstraint:imgView1Left];
//下约束 20
NSLayoutConstraint *imgView1Bottom = [NSLayoutConstraint
constraintWithItem:imgView1
attribute:NSLayoutAttributeBottom
relatedBy:0
toItem:self.view
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:-20];
[self.view
addConstraint:imgView1Bottom];
//右约束 20
NSLayoutConstraint *imgView1Right = [NSLayoutConstraint
constraintWithItem:imgView1
attribute:NSLayoutAttributeRight
relatedBy:0
toItem:imgView2
attribute:NSLayoutAttributeLeft multiplier:1.0
constant:-20];
[self.view
addConstraint:imgView1Right];
/************imgView2*************/
//可以相对于self.view
也可以相对于imgView1 设置imgView2的约束
//上 20
NSLayoutConstraint *imgView2Top = [NSLayoutConstraint
constraintWithItem:imgView2
attribute:NSLayoutAttributeTop
relatedBy:0
toItem:imgView1
attribute:NSLayoutAttributeTop multiplier:1
constant:0];
//右 20
NSLayoutConstraint *imgView2Right = [NSLayoutConstraint
constraintWithItem:imgView2
attribute:NSLayoutAttributeTrailing
relatedBy:0
toItem:self.view
attribute:NSLayoutAttributeTrailing
multiplier:1.0
constant:-20];
//下 20
NSLayoutConstraint *imgView2Bottom = [NSLayoutConstraint
constraintWithItem:imgView2
attribute:NSLayoutAttributeBottom
relatedBy:0
toItem:imgView2.superview
attribute:NSLayoutAttributeBottom
multiplier:1
constant:-20];
//等宽约束
NSLayoutConstraint *equalWidth = [NSLayoutConstraint
constraintWithItem:imgView2
attribute:NSLayoutAttributeWidth
relatedBy:0
toItem:imgView1
attribute:NSLayoutAttributeWidth
multiplier:1
constant:0];
//一次性添加多个约束
[self.view
addConstraints:@[imgView2Top,imgView2Right,imgView2Bottom,equalWidth]];
//约束还可以修改
删除 设置是否有效
//修改
//imgView1Bottom.constant = imgView1Bottom.constant + 20;
//删除约束
//删除单个约束
//[self.view removeConstraint:imgView1Bottom];
//删除多个约束
//[self.view removeConstraints:@[imgView1Bottom,imgView1Left]];
//使约束失效
和 继续有效
//让某些约束失效
//[NSLayoutConstraint deactivateConstraints:@[imgView1Left,imgView1Right]];
//让某些约束继续有效
//[NSLayoutConstraint activateConstraints:@[imgView1Right,imgView1Left]];
}
- (void)viewDidLoad
{
[super
viewDidLoad];
self.title =
@"NSLayoutConstraint适配";
//创建imgView1
imgView1 = [[UIImageView
alloc] init];
imgView1.image = [UIImage
imageNamed:@"1"];
[self.view
addSubview:imgView1];
//创建imgView2
imgView2 = [[UIImageView
alloc] init];
imgView2.image = [UIImage
imageNamed:@"3"];
[self.view
addSubview:imgView2];
//不对imgView1使用autoResizing(使用autolayout就不能使用autoResizing)
imgView1.translatesAutoresizingMaskIntoConstraints =
NO;
imgView2.translatesAutoresizingMaskIntoConstraints =
NO;
[self
addMyLayoutConstriant];
}
#pragma mark 代码添加约束
- (void)addMyLayoutConstriant
{
//代码创建约束
//NSLayoutConstraint 是创建约束对象的类名
/************imgView1*************/
//创建imgView1的上边的约束
//第一个参数:要约束的视图对象(也就是要对哪一个视图添加约束)
//第二个参数:要添加的约束的属性类型,(也就是要添加的是上
下 左 右
宽 高 等这些属性)
//第三个参数:相对关系,分为
等于 小于 大于
//第四个参数:相对于哪一个视图对象
//第五个参数:相对视图的哪一个属性
,比如 上 下。。。
//第六个参数:乘数
倍数,(也就是第一个视图的属性值是第二个视图属性值得倍数)通常是1.0
//第七个参数:常量
/*
以上几个参数 综合起来组成了一个表达式:
item1的属性值 =/<=/>=
第二个视图的属性值 * multiplier + constant
即:第一个视图的属性值 =/<=/>=
第二个视图的属性值 * 倍数 + 常量
*/
//上约束 20
NSLayoutConstraint *imgView1Top = [NSLayoutConstraint
constraintWithItem:imgView1
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual toItem:self.view
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:84];
//添加约束,约束添加在父视图上,因为布局是相对于父视图来布局
[self.view
addConstraint:imgView1Top];
//左约束 20
NSLayoutConstraint *imgView1Left = [NSLayoutConstraint
constraintWithItem:imgView1
attribute:NSLayoutAttributeLeft
relatedBy:0
toItem:self.view
attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:20];
[self.view
addConstraint:imgView1Left];
//下约束 20
NSLayoutConstraint *imgView1Bottom = [NSLayoutConstraint
constraintWithItem:imgView1
attribute:NSLayoutAttributeBottom
relatedBy:0
toItem:self.view
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:-20];
[self.view
addConstraint:imgView1Bottom];
//右约束 20
NSLayoutConstraint *imgView1Right = [NSLayoutConstraint
constraintWithItem:imgView1
attribute:NSLayoutAttributeRight
relatedBy:0
toItem:imgView2
attribute:NSLayoutAttributeLeft multiplier:1.0
constant:-20];
[self.view
addConstraint:imgView1Right];
/************imgView2*************/
//可以相对于self.view
也可以相对于imgView1 设置imgView2的约束
//上 20
NSLayoutConstraint *imgView2Top = [NSLayoutConstraint
constraintWithItem:imgView2
attribute:NSLayoutAttributeTop
relatedBy:0
toItem:imgView1
attribute:NSLayoutAttributeTop multiplier:1
constant:0];
//右 20
NSLayoutConstraint *imgView2Right = [NSLayoutConstraint
constraintWithItem:imgView2
attribute:NSLayoutAttributeTrailing
relatedBy:0
toItem:self.view
attribute:NSLayoutAttributeTrailing
multiplier:1.0
constant:-20];
//下 20
NSLayoutConstraint *imgView2Bottom = [NSLayoutConstraint
constraintWithItem:imgView2
attribute:NSLayoutAttributeBottom
relatedBy:0
toItem:imgView2.superview
attribute:NSLayoutAttributeBottom
multiplier:1
constant:-20];
//等宽约束
NSLayoutConstraint *equalWidth = [NSLayoutConstraint
constraintWithItem:imgView2
attribute:NSLayoutAttributeWidth
relatedBy:0
toItem:imgView1
attribute:NSLayoutAttributeWidth
multiplier:1
constant:0];
//一次性添加多个约束
[self.view
addConstraints:@[imgView2Top,imgView2Right,imgView2Bottom,equalWidth]];
//约束还可以修改
删除 设置是否有效
//修改
//imgView1Bottom.constant = imgView1Bottom.constant + 20;
//删除约束
//删除单个约束
//[self.view removeConstraint:imgView1Bottom];
//删除多个约束
//[self.view removeConstraints:@[imgView1Bottom,imgView1Left]];
//使约束失效
和 继续有效
//让某些约束失效
//[NSLayoutConstraint deactivateConstraints:@[imgView1Left,imgView1Right]];
//让某些约束继续有效
//[NSLayoutConstraint activateConstraints:@[imgView1Right,imgView1Left]];
}
相关文章推荐
- Python List Pop
- python实现文本去重且不打乱原本顺序
- 运行java的class文件方法详解
- Kinect开发(二) 基于C# WPF的Kinect开发环境配置
- java数组复制
- C语言链表的简单实用
- URAL 1733 Forgotten Technology
- 充满BUG的世界观——再遇Java内存泄露
- PHP 加密技术
- VS2013中带命令行参数的调试方法
- 【Eclipse】--Eclipse反编译插件jadeclipse的安装
- C++ stringstream的用法|c++ 字符串流 sstream(常用于格式转换)
- 1021. 个位数统计 (15)
- 一起talk C栗子吧(第一百一十三回:C语言实例--线程同步之信号量一)
- 学习Django
- jsp中js获取java的传值
- java实现_用数组实现栈
- Spring 的优秀工具类盘点第 2 部分
- 学习Slim Framework for PHP v3 (四)--get()是怎么加进去的?
- Spring 的优秀工具类盘点第 1 部分