Auto Layout學習1
使用步驟:1.利用NSLayoutConstraint類創建約束對象 2.將約束對象添加到View上
例子:將一個正方形view加入vc中
UIView *centerView = [[UIView alloc]init]; [self.view addSubview:centerView]; centerView.backgroundColor = UIColorFromHex(0xFFEC8B, 1.0); centerView.translatesAutoresizingMaskIntoConstraints = NO;注:UIColorFromHex是我自己定義的宏下面加入約束
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:centerView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant:150.0]; [self.view addConstraint:widthConstraint]; NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:centerView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant:150]; [self.view addConstraint:heightConstraint]; NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:centerView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:200]; [self.view addConstraint:topConstraint]; NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:centerView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:100]; [self.view addConstraint:leftConstraint];這里簡單介紹一下constraintWithItem: 這里是要被約束的對象
attribute: 這里是約束種類(有好多種,下個文章分析吧)
relatedBy: 關系大小
typedef NS_ENUM(NSInteger, NSLayoutRelation) { NSLayoutRelationLessThanOrEqual = -1, NSLayoutRelationEqual = 0, NSLayoutRelationGreaterThanOrEqual = 1,};toItem: 建立約束關系的對象attribute: 約束種類
multiplier:倍數
constant:常量
約束公式: 被約束對象.約束attribute = (關系對象.約束attribute) * 倍數multiplier + 常量constant;
詳細屬性關系,使用例子下章說吧。。。因為我自己還沒搞懂
補充iOS8以后新版約束方法
NSLayoutConstraint *centerX = [NSLayoutConstraint constraintWithItem:centerView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]; centerX.active = YES;
新聞熱點
疑難解答