Day18spring
回顾:架构
1. 坐标系:框架
frame bounds center transformide
2. 触点(UITouch)布局
touchesBegan:withEventui
touchesMoved:withEventes5
touchesEnded:withEventspa
3. 布局(Layout)rest
影响屏幕大小该变的因素code
a.横竖屏的切换
b.设备的不一样
c.状态栏(通话 录音 热点)
d.各类bar(NavigationBar toolBar TabBar)
e.键盘的中英文切换
因此在须要屏幕大小发生该变的时候,从新布局各个子视图,对应的方法就是重写控制器的ViewDidLayoutSUbView 方法,可是该方法只是对控制器携带的视图内部的各个子视图的一个布局控制,没法对子视图内部的控件实现控制。
4. 关掉AutoLayout之后,drawRect方法中针对视图绘制的图形在平屏幕旋转时或被拉伸,解决办法,须要设置视图的“contentMode”设置“redraw”便可。
今天:
1. UIView对内部子视图的布局(典型应用:TableViewCell对内部视图的布局)
1.1 如何实现:
step1:自定义视图 继承自UIView
step2:重写自定义视图的方法
a.viewWillLayoutSubViews
b.layoutSubViews
c.viewDidLayoutSubView
方法的执行顺序:a. b. c.
通常重写layoutSubView方法便可
2.布局对状态栏和各类Bar的处理
经常使用属性:
topLayoutGuide.length//屏幕上放当前被占据的区域的长度
bottomLayoutGuide.length //屏幕下方当前被占据的长度
3. Autoresizing布局
3.1 是什么?
是旧版本(IOS5以前)的自动布局技术,操做简单 ,API简单 弄能也简单,有局限性,因此好久以前叫作struts/spring(架构、弹簧)技术
3.2 核心理念
当屏幕大小发生变化时,根据变化的比例,对子视图进行同比例的变化
3.3 经过设置检查器的属性实现
step1:关闭AutoLayout
step2:选中须要布局的子视图
step3:打开检查器5
step4:点亮须要的红线
外框(4个)红线负责视图到父视图的边缘
内框(2个)红线负责视图的内部是否能够实现拉伸
3.3 用代码实现Autoresizing
Autorestory和代码布局能够同时使用,用代码实现Autoresizing的不足
button.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizin gFlexibleBottomMargin
代码设置时,规则描述与检查器中描述相反,只须要设置可变的边距
4 Autolayout自动布局
4.1 是什么?
是从IOS6以后的一个新的布局技术,功能强大操做复杂,从Xcodes5开始,慢慢好用了,在Xcode6中功能更强大了。
核心理念:使用约束(constraint)来描述控件在视图中的位置,当屏幕大小发生变化时,系统会根据约束条件自动计算出frame的值,而后将该值赋给控件,实现控件的排布。
4.2 使用故事板实现对代码的布局
4.3 操做的重点:
a.选中控件,分析6点,上下左右以及控件的宽高须要那些约束条件才能肯定
b.约束的添加能够经过屏幕下方的选项,或者是,选中控件之后,按住control,连线到屏幕边缘或其余试图
c.能够添加的约束条件有:对其方法(与中心点对其或与其余控件对其)、与边缘或其余视图的间距(前间距和尾间距)、视图的宽高是给定值仍是以其余视图作参照标准。
d.添加约束后,正确的结果出现时,屏幕中有蓝线,存在红色虚线框架时,表明视图占据的区域,有橘色线条时,表明当前摆放的位置与定义的位置有距离,能够经过底部的第三个选项菜单选择更新某个视图的frame或者更新全部的frame
e.选中一个视图,查看第五个检查器能够看到该视图已经加了的约束,能够选中约束修改约束的内容
f.选中一个视图,经过查看场景的文档结构构图,观察该场景下的约束是否有错误或者警告,若是有,能够点击该场景的右上角的红色点,进入说明界面,红色的提示为异常,必须修改成正确,橘色的系统提示,通常是实际位置与约束位移有误差,只要更新frame,就可让橘色的警号消失