介绍

关于AutoLayout的介绍可参考:
使用解读:
https://segmentfault.com/a/1190000004386278

iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解
http://www.cnblogs.com/cxbblog/p/4166876.html

AutoLayout使用注意点参考:
https://github.com/smileyborg/UIView-AutoLayout/wiki/Tips-and-Tricks

AutoLayout实现UITableView的Cell动态布局及动态行高必看手册
Using Auto Layout in UITableView for dynamic cell layouts & variable row heights
http://stackoverflow.com/questions/18746929/using-auto-layout-in-uitableview-for-dynamic-cell-layouts-variable-row-heights
http://codingobjc.com/blog/2014/10/15/shi-yong-autolayoutshi-xian-uitableviewde-celldong-tai-bu-ju-he-ke-bian-xing-gao/index.html (中文翻译)

约束与frame、bounds的关系

AutoLayout启用时,约束与手动设置frame方式冲突,不能混合使用,需要更改布局时应该考虑动态修改约束变量,然后触发强制刷新layout
通过约束条件,AutoLayout使用自动布局引擎Cassowary动态计算、维护各个view所需的frame
但bounds属性依然可以手动更改操作
frame表示view本身相对父容器的位置、大小信息
bounds表示view的内容相对view的实际绘制坐标位置,一般为(0, 0)
bounds的尺寸与frame尺寸不一定相等(内容与view尺寸不一定相等)

关于bounds的解释与使用可参考:
如何对使用了autolayout的UIView添加动画
http://www.cocoachina.com/ios/20141010/9869.html

修改约束

频繁的删除、添加约束会导致严重的性能问题
相对于删除再添加新约束,苹果推荐通过修改已有约束的方式实现更新
拥有最高优先级(1000-required)的约束不允许发生冲突,此外的约束不强制必须满足,因此可存在竞争性冲突设置

view.constraints数组包含layout子view所需的所有约束
可通过constraint的firstItem、firstAttribute、secondItem、secondAttribute、constant等属性筛选出需要修改的约束
也可将约束绑定到outlet对象进行修改
约束中只有constant属性允许实时修改

约束修改完毕后,可调用重layout等方式刷新界面布局

  • 在合适的方法内修改约束时,不需要手动刷新布局,如layoutSubviews中或layoutSubviews被调用前。

操作方法可参考:
Auto growing UITextView Using Auto Layout
https://corecocoa.wordpress.com/2013/11/09/auto-growing-uitextview-using-auto-layout/

具备内容动态高度的组件可不设置高度约束(运行时会被隐式指定并实时更改)

关于约束的Placeholder - Remove at build time属性

当XIB的组件缺少最低必要约束条件时(例如View高度),编译时IB系统会自动生成插入一个默认的约束条件用以补全所有约束,每个界面最终必须使用静态绝对布局来定位,部分尺寸可变组件需要动态相对布局时,在运行时通过组件内部代码或手工代码进行约束值的动态更改、重新layout。
当不希望系统自动追加约束条件时,可在XIB中设定一个临时约束,指定Remove at build time,则在编译期间对该约束进行忽略,并不再追加缺少的约束,此时需要在代码中手动添加所缺的约束条件。
同一组件中存在重复类型(并且优先级相同??)的约束时将抛出异常(除非标记为deactivate)。

关于Remove at build time以及Uninstalled constraint与Placeholder constraint的区别,可参考:
http://stackoverflow.com/questions/19015215/trouble-with-autolayout-on-uitableviewcell

AutoLayout 约束与frame、bounds的设置的更多相关文章

  1. UIScrollView的AutoLayout约束

    首先UIScrollview包含自身的frame和contentSize二个部分.frame决定其展示给用户的可见区域,contentSize决定其整个内容的大小.如果frame的宽高小于conten ...

  2. 利用代码添加autolayout约束

    1.概述 通常我们通过storyboard能够完成的,代码也能够完成,所以这里介绍下代码实现约束的添加,通常我们不这么干(在不使用第三方框架的情况下,使用系统自带的类添加约束特别繁琐),所以这里仅仅简 ...

  3. 使用代码创建AutoLayout约束

    使用代码创建AutoLayout约束 1.代码创建约束的步骤 2.代码创建约束的常用方法 3.代码创建约束的原则 4.禁用Autoresizing的原因 5. 设置相对状态栏的约束,使用self.to ...

  4. UIView 中 frame, bounds, center 属性的关系

    最近一直在学 iOS 开发,所以专门创建了这样一个类别,将自己学习中的一些问题整理,记录下来.由于自己是初学者,所以所写的文章非常基础,写这个类别一是为了给自己留下存 档,二是为了给和我有同样问题的初 ...

  5. 初见IOS的UI之:UI控件的属性frame bounds center 和transform

    这些属性,内部都是结构体:CGRect CGPoint CGFloat 背景知识:所有的控件都是view的子类,屏幕就是一个大的view:每个view都有个viewController,它是view的 ...

  6. UIView frame, bounds and center

    http://stackoverflow.com/questions/5361369/uiview-frame-bounds-and-center Since the question I asked ...

  7. frame,bounds,center-三者的含义

    frame与bounds的区别比较 frame,bounds,center-三者的含义 偶然觉的,这三个属性有时候定位的时候,需要用.于是就来搞清楚,到底frame,bounds,center 这三个 ...

  8. frame.bounds和center

    CGPoint point=CGPoint(x,y);  //表示位置 CGSize size=CGSzieMake(width,height);  //表示大小 CGRect rect=CGRect ...

  9. Scala 基础(十六):泛型、类型约束-上界(Upper Bounds)/下界(lower bounds)、视图界定(View bounds)、上下文界定(Context bounds)、协变、逆变和不变

    1 泛型 1)如果我们要求函数的参数可以接受任意类型.可以使用泛型,这个类型可以代表任意的数据类型. 2)例如 List,在创建 List 时,可以传入整型.字符串.浮点数等等任意类型.那是因为 Li ...

随机推荐

  1. 教你怎样写自定义IP地址算法

    通过IP地址可以看到算法规律,写成自定义IP地址,也可以把IP地址转为自定格式的IP地址.也可以用于加密一些明文数字.起始次方可自定义(以1次方和0次方为例) a.以下写正反算法(以1次方为最小单位) ...

  2. 问题解决——ShowWindow不显示窗口

    配合任务栏通知区域. //MFC对话框程序 void CXXXDlg::OnShowHideUi() { // TODO: 在此添加命令处理程序代码 m_bShown=!m_bShown; ShowW ...

  3. javascript图片库

    将图片发布到网上的办法很多,可以简单地把所有图片都放在一个网页中,但是会导致这个网页过于庞大.为每张图片分别创建一个网页的解决办法值得考虑,但是制作过程需要花费非常多的时间和精力. 如果想要两全其美, ...

  4. ubuntu16.04 安装网易云音乐

    最爱的播放器 网易云音乐 哈哈,刚刚折腾了双系统,立马开始了软件安装. 网易云音乐从官网下载对应的 64 位版本,我下载的是 netease-cloud-music_1.0.0_amd64_ubunt ...

  5. 大型文档源文件拆分编辑编译\include{filename}

    大型文档,如果把所有的文字都录入在同一个.tex文件中,那个文件的体积是不可估量的,文件的结构式混乱不堪的,文字的定位也是令人头疼的.幸亏latex提供了结构化的处理命令---include. 命令\ ...

  6. linux下对2个连通的串口读写遇到的问题

    想要分析下zmodem协议,搜索发现linux下的工具lrzsz是一个包含x,y,z modem传输的工具,下载其源码,下载.它可以借助各种串行的接口进行数据传输,比如串口,socket也可以,这点描 ...

  7. Sql 随机更新一条数据返回更新数据的ID编号

    DECLARE @parimaryTable(临时表)  Table(prizecode varchar(50)); update top (1)  数据表 set 字段a='数值' ,字段b=‘数值 ...

  8. NOIP2010普及组 三国游戏 -SilverN

    #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> usin ...

  9. 【转载】eclipse插件安装

    原文:http://blog.csdn.net/dylan619/article/details/46839941 原来的eclipse3.7安装了太多插件后,m2e怎么也安装不成功,因此今天重新下载 ...

  10. 怎么通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端?

    今天在论坛上看到这样一个问题,有必要编辑搜集下. 问题描述:怎么通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端 题主用jquery接收 <input name= ...