Xcode AutoLayout布局(二) 两种不同布局方式

Autoresizing与Constraints对比

一、使用Autoresizing进行约束

  • 流布局,需要从上至下或从下至上布局,最上方或最下方的第一个控件约束将作为标定约束,之后的控件将根据该标定约束从上至下或从下至上逐个匹配约束。
  • 优点
      1.不需要单独为控件添加扩展类就能达到自动适配机型大小
      2.可在storyboard中直接切换机型来观看真实效果
      3.可在代码中设置控件frame位置
  • 缺点
      1.只能在垂直或水平方向进行单独放大缩小,无法对控件进行等比例放大缩小
      2.只可设置控件与父控件之间的约束,无法设置同层级上多控件之间的相对约束
      3.对于自计算控件,无法更具内容的多少自动调节大小
      4.单个控件约束修改后无法自动更新其他控件,需要单个控件单个控件重新配置

二、使用Constraints进行约束

  • 优点
      1.可对控件进行等比例缩放
      2.可设置同层级上多控件之间的相对约束
      3.对于自计算控件,可根据内容的多少自动调节大小
  • 缺点
      1.无法在代码中直接使用frame设置控件位置

三、约束需要遵循遵循两大原则

  • 确定控件的大小(宽高值) 自计算大小控件可不设置
      自计算大小控件:UILabel、UIButton、UITextField等
  • 确定控件的坐标位置

四、实例 (以下使用Constraints约束)

0.基本控件约束

  • 约束设置不同组合方法


    1.子控件与父容器上下左右间距

    2.子控件的宽和高 + 左(水平单端)间距 + 上(垂直单端)间距

    3.子控件的宽或高 + 子控件宽高比 + 左(水平单端)间距 + 上(垂直单端)间距

    4.子控件宽高比 + 水平/垂直方向上两端间距 + 上(垂直单端)/水平单端间距

1.多文本相互约束

多文本约束
要求:
1.文本1当超过最大宽度后自动缩短,否则完整显示
2.文本2完整显示不缩短
3.文本3当超过最大宽度后自动缩短,否则完整显示

首先我们按照常规进行约束设置
1.设置图片的上左下间距,图片宽高
2.设置3个文本宽的水平位置及间距

情况1:文本内容未超过内容区域

这时我们会发现报错,为什么会发生这个错误呢?

  

由图可以看出文本1与文本2的间距为133,而我们设置的约束小于该间距,这时系统就需要对文本1与文本2进行填充处理,由于文本默认的『Content Hugging Priority』(即抗拉伸优先值) 都为251,故系统无法确认究竟要对哪个文本控件进行拉伸从而报错,这时我们只要改变文本的抗拉伸优先值即可消除错误,想要哪个文本优先拉伸就让其优先值更小即可,这里我们将文本1的优先值小于文本2的优先值。

情况2:文本内容超过区域

  当我们将文本1的内容增加时,发现又出现了错误,根据布局可以看出,这时文本1与文本2已经重叠,而要保证俩文本之间间距保持在设定值就必须对其中一个文本进行压缩,由于文本默认的『Content Compression Resistance Priority』(即抗压缩优先值) 都为750,故发生了上文同样的问题,系统无法确定究竟要对哪个文本控件进行压缩从而报错,这时我们只要改变文本的抗压缩优先值即可消除错误,想要哪个文本优先压缩就让其优先值更小即可,这里我们将文本1的优先值小于文本2的优先值。


至此达到我们需要的约束效果

父容器随子控件的大小变化而变化,适用于自计算宽高控件

2.UIScrollView的约束

image.png

  向ScrollView内的SubView添加约束,报错,提示子控件缺少横轴或宽度相对位置,这里明显已经设置了SubView的左上右约束为10,高度约束为60,为什么还会出现该报错呢?


UIScrollView的隐藏控件

  UIScrollView内部存在一个隐藏的ContentView,向UIScrollView添加的所有SubView都是添加在ContentView内,此时对SubView进行约束会直接导致ContentView只设置左上约束为0,而ContentView的大小需要通过SubView的约束,从而导致上文报错。
  这里存在一个问题,对于固定宽度的SubView,直接设置宽度,对于宽度需要随着UIScrollView宽度变化的,则需要设置SubView相对于父容器居中,在这里有个特殊的地方,当选择居中时,其父容器自动判断为UIScrollView而不是ContentView,故而设置完成后,不需要设置宽度,ContentView也能计算出自身的宽度,从而达到需要的约束。
  对于一个方向固定宽度,另一方向滑动的UIScrollView,对其固定宽度的设置相对居中,滑动的部分则直接设置其真实长度即可。

3.父容器随子控件宽度变化

设置父容器的相对位置
  • 这里由于UILabel能够根据字体及字数的多少自动计算其宽高,故可以不设置子控件的宽高值,对于其他非自计算宽高控件则需要单独设置宽高值才可以


    设置子控件的相对位置

    最终效果

4.多个控件均分宽度

设置好左右上下约束
  • 上下左右约束可以根据需求随意设置,此处由于优先级相同,系统无法确定优先拉伸哪个,故报错。


    选中多控件设置宽度相同
  • 多个控件,按住command后点选多控件后设置equal widths


    最终效果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,931评论 3 118
  • https://www.centosblog.com/how-to-change-hostname-on-cent...
    ilaoke阅读 2,219评论 0 0
  • 1.高手的思考都是清晰的,编程真的是一个很好活动,让人的思考越来越清晰。清晰清晰的思考跟生活习惯多多少少也有点关系...
    小l新阅读 113评论 1 0
  • “依照朝廷律令,此人该当何罪?”地上之人极为慎重,开口便是律令,问的人哑口无言,声音清清冷冷的,人群之中顿时议论纷...
    棠棠久久阅读 190评论 0 0