关于UIView布局的总结
总结一下布局UIView
1.Laying out Subviews(布局子视图)
系统提供了相关的三个api
- (void) layoutSubviews
在IOS5.1和之前的版本,此方法的缺省实现不会做任何事情(实现为空),IOS5.1之后(IOS6开始)的版本,此方法的缺省实现是使用你设置在此view上面的constraints(Autolayout)
去决定subviews的position和size。UIView的子类如果需要对其Subviews进行更精确的布局,则可以重写此方法。可以在此方法中直接设置Subviews的frame。
- (void) setNeedsLayout
此方法会将view当前的layout设置为无效的,并在下一个update cycle(更新周期)里去触发layout更新
- (void) layoutIfNeeded
使用此方法强制立即进行layout,从当前view开始,此方法会遍历整个view层次(包括superviews)请求layout。因此调用此方法会强制整个view层次布局
2.Triggering Constraint-Based Layout(引发基于布局)
关于autolayout中的一些方法
- (void)setNeedsUpdateConstraints
当一个自定义view的某个属性发生改变,并且可能影响到constratin时,可需要调用此方法去标记constraints需要在未来的某个点更新,系统然后调用updateConstraints
- (BOOL)needsUpdateConstraints
constraint-based layout system使用此返回值去决定是否需要调用
updateConstraints 作为正常布局过程的一部分。
- (void)updateConstraints
自定义view应该重写此方法在其中建立constraints,
注意:要在实现在最后调用 [super updateConstraints]
3.Layout Process
Auto layout在view显示之前,多引入了两个步骤:updating constraints 和 laying out views
每一个步骤都依赖于上一个。display依赖layout,而layout依赖updating constraints。
updating constraints->layout->display
第一步:updating constraints,
被称为测量阶段,其从下向上(from subview to super view),为下一步layout准备信息。
可以调用方法setNeedUpdateConstraints 去触发此步。
但是,当你自定义view的时候,如果一些改变可能会影响到布局的时候,通常需要自己去通知Auto layout。
说到自定义view了,通常可以重写updateConstraints方法,在其中可以添加view需要的局部的contraints。
第二步:layout,
其从上向下(from super view to subview),此步主要应用上一步的信息去设置view的center和bounds。可以通过调用setNeedsLayout去触发此步骤
此方法不会立即应用layout。如果想要系统立即的更新layout,可以调用layoutifNeeded。另外,自定义view可以重写方法layoutSubviews来在layout
的工程中得到更多的控制。
第三步:display,
此步时把view渲染到屏幕上,它与你是否使用Auto layout无关,
其操作是从上向下,通过调用setNeedsDisplay触发
因为每一步都依赖前一步,因此一个display可能会触发layout,当有任何layout没有被处理的时候,同理,layout可能会触发updating constraints,当constraint system更新改变的时候。
这三步不是单向的,constraint-based layout是一个迭代的过程,layout过程中,可能去改变constraints,有一次触发updating constraints,进行一轮layout过程。这可以被用来创建高级的自定义视图布局,

关于UIView布局的总结的更多相关文章
- What's New in iOS9  iOS9功能改进
		What's New in iOS9 This article summarizes the key developer-related features introduced in iOS 9, w ... 
- 【iOS 开发】基本 UI 控件详解 (UIButton | UITextField | UITextView | UISwitch)
		博客地址 : http://blog.csdn.net/shulianghan/article/details/50051499 ; 一. UI 控件简介 1. UI 控件分类 UI 控件分类 : 活 ... 
- 108.UIView关于布局和约束的方法(AutoLayout)
		http://blog.csdn.net/wangyanchang21/article/details/52270136 关于布局(UIViewHierarchy) 1.layoutSubviews ... 
- IOS UIView 03- 自定义 Collection View 布局
		注:本人是翻译过来,并且加上本人的一点见解. 前言 UICollectionView 在 iOS6 中第一次被引入,也是 UIKit 视图类中的一颗新星.它和 UITableView 共享一套 API ... 
- UIView /  UIView的布局
		//! 一个视图可以有n个子视图,但是一个视图只能有一个父视图 struct CGRect { CGPoint origin; CGSize size; }; CGRectMake(CGFlo ... 
- UIView的层次调整,及子view布局模式自动布局模式(停靠模式)
		UIView*view1=[[UIView alloc]initWithFrame:CGRectMake(10,30,300,30)]; view1.backgroundColor=[UIColor ... 
- UICollectionLayout布局 —— UIKit之学习UICollectionView记录二《流水布局》
		重点知识 一. 加载collectionView注意事项 1.创建collectionView,有两种方式 :一种是xib和一种是纯代码:设置代理和数据源,注册cell,配置流水布局的属性,如上.下. ... 
- 【转】iOS,搜索标签布局
		前一阵时间,看过这样一个demo,代码不多,但是简洁易懂. 转自: // 代码地址: https://github.com/iphone5solo/PYSearch // 代码地址: http:/ ... 
- iOS-屏幕适配-UI布局
		iOS 屏幕适配:autoResizing autoLayout和sizeClass 一.图片解说 -------------------------------------------------- ... 
随机推荐
- PHP精选数组函数
			编程怎么能少的了数组呢,以下是学习PHP时常用的数组处理函数.在编程中要遵循一个原则就是DRY(Don`t Repeat Yourself)原则,PHP中有大量的函数,都记住这些函数不太现实,但常用的 ... 
- php使用post方式获得文件扩展名
			<form action="" method="post"> <input type="file" value=" ... 
- 1Z0-053 争议题目解析688
			1Z0-053 争议题目解析688 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 688.Which two statements are true about the compr ... 
- JavaWeb路径问题打包总结--小心出门右转404
			话说,培训和自学就不是一个回事,两周讲完java基础,两天讲完jsp,两节课讲完servlet,还真不是一般人能受得了的,这两天学习jsp和servlet频繁被路径问题困扰,倒不是出错,只是各种act ... 
- DotNet处理服务器路径的方法
			项目中需要使用到路径处理的地方比较多,对于路径的解析和匹配有时较为繁琐,现在提供一个对路径进行解析的方法: 1.验证设置路径字符串: /// <summary> /// 验证设置路径字符串 ... 
- Kooboo CMS - @Html.FrontHtml().Meta()详解。
			下面是代码: public virtual IHtmlString Meta() { AggregateHtmlString htmlStrings = new AggregateHtmlString ... 
- C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息
			C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: ... 
- 用于后台管理的列表数据控件:DataGrid和Select
			常听人说不喜欢javascript.然而我一个一直用C#做后端的人,最喜欢的编程语言就是javascript了,我接收它的优点,也接收它的缺点! 前段时间接触过easyui,用过里面的DataGrid ... 
- WPF数据验证
			当填写表单时,需要对填写的内容进行验证,检查数据是否符合要求,比如字符串的长度.日期的格式.数字等.WPF支持自定义验证规则,并提供可视化反馈,以便在输入无效值时向用户发出通知. 下面的示例将演示一个 ... 
- 基于.net mvc 的供应链管理系统(YB-SCM)开发随笔1-开篇
			作为开篇之作,先把这个项目的介绍和一些技术点给各位. 1.项目所用到的技术 (1)前台展示:ASP.NET MVC 3.0+Jquery+Sea+Bootstrap等 (2)开发环境:VS2012/V ... 
