AutoLayout 使用技巧——自动布局, 系统自带的类的使用

使用系统自带类进行自动布局必须理解的一个公式

+(instancetype)constraintWithItem:(id)view1 
                        attribute:(NSLayoutAttribute)attire
                        relatedBy:(NSLayoutRelation)relation 
                            toItem:(id)view2 
                         attribute:(NSLayoutAttribute)attr2 
                       multiplier:(CGFloat)multiplier constant:(CGFloat)c;


** 解释:** 某个 view1 的 attribute1 等于(小于或等于/大于或等于)某个 view2 的 attribute2 的 multiplier 倍 加上 constant

** 简明公式:** view1.attribute1 = view2.attribute2 * multiplier + constant;

说明:multiplier 这个属性可以用来进行倍数的放大和缩小
      如果你想设置的约束里不需要第二个view,要将第四个参数设为nil,第五个参数设为NSLayoutAttributeNotAnAttribute
举例: 
[NSLayoutConstraint constraintWithItem:view1  
                             attribute:NSLayoutAttributeLeft  
                             relatedBy:NSLayoutRelationEqual  
                                toItem:view2  
                             attribute:NSLayoutAttributeRight  
                            multiplier:1  
                              constant:10];
翻译过来就是:view1的左侧,在,view2的右侧,再多10个点,的地方。

系统类的使用

  1. 使用注意点
    1.1. 要对子视图进行布局的时候, 子视图必须先添加到父视图的内部
    [self.view addSubview:myView];
    1.2. 取消子视图的 Autoresizing

练习1.
将 myView 设置为 距离 self.view 的四周的间隙为 10


Snip20151029_7.png
//居中 的写法
 [self.view addConstraint:[NSLayoutConstraint constraintWithItem:btn  attribute:NSLayoutAttributeCenterX  relatedBy:NSLayoutRelationEqual  toItem:self.view  attribute:NSLayoutAttributeCenterX  multiplier:1  constant:0]];
     
     
//距离底部20单位
//注意NSLayoutConstraint创建的constant是加在toItem参数的,所以需要-20。
[self.view addConstraint:[NSLayoutConstraint  constraintWithItem:btn  attribute:NSLayoutAttributeBottom  relatedBy:NSLayoutRelationEqual  toItem:self.view  attribute:NSLayoutAttributeBottom  multiplier:1  constant:-20]];
  
//定义高度是父View的三分之一
[self.view addConstraint:[NSLayoutConstraint  constraintWithItem:btn  attribute:NSLayoutAttributeHeight  relatedBy:NSLayoutRelationEqual  toItem:self.view  attribute:NSLayoutAttributeHeight  multiplier:0.3  constant:0]];
 // 关系枚举
     typedef NS_ENUM(NSInteger, NSLayoutRelation) {
        NSLayoutRelationLessThanOrEqual = -1,                           小于等于
        NSLayoutRelationEqual = 0,                                      等于
        NSLayoutRelationGreaterThanOrEqual = 1,                         大于等于
     };
     
     
     // 约束的枚举
     typedef NS_ENUM(NSInteger, NSLayoutAttribute) {
     NSLayoutAttributeLeft = 1,                                         左侧
     NSLayoutAttributeRight,                                            右侧
     NSLayoutAttributeTop,                                              上方
     NSLayoutAttributeBottom,                                           下方
     NSLayoutAttributeLeading,                                          前面(首部)
     NSLayoutAttributeTrailing,                                         后面(尾部)
     NSLayoutAttributeWidth,                                            宽
     NSLayoutAttributeHeight,                                           高
     NSLayoutAttributeCenterX,                                          中心x(x轴中心)
     NSLayoutAttributeCenterY,                                          中心y(y轴中心)
     NSLayoutAttributeBaseline,                                         文本底标线 (通常是指视图的底部放文字的地方)
     NSLayoutAttributeLastBaseline = NSLayoutAttributeBaseline,
     NSLayoutAttributeFirstBaseline NS_ENUM_AVAILABLE_IOS(8_0),
     
     
     NSLayoutAttributeLeftMargin NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeRightMargin NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeTopMargin NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeBottomMargin NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeLeadingMargin NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeTrailingMargin NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeCenterXWithinMargins NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeCenterYWithinMargins NS_ENUM_AVAILABLE_IOS(8_0),
     
     NSLayoutAttributeNotAnAttribute = 0                                没有约束
     };
     
     NSLayoutAttributeLeft/NSLayoutAttributeRight 和NSLayoutAttributeLeading/NSLayoutAttributeTrailing的区别是left/right永远是指左右,而leading/trailing在某些从右至左习惯的地区会变成,leading是右边,trailing是左边。(大概是⊙﹏⊙b)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容