IOS之UIKit_Day18
Day18
回顾:
1. 坐标系:
frame bounds center transform
2. 触点(UITouch)
touchesBegan:withEvent
touchesMoved:withEvent
touchesEnded:withEvent
3. 布局(Layout)
影响屏幕大小该变的因素
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,就可以让橘色的警号消失
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。