您的位置:首页 > 编程语言

自动适配之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]];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: