iOS开发frame, contentSize, contentOffset, contentInset 区别联系浅析
1. 概述
iOS开发中,必然会涉及到布局相关问题,frame,bounds,contenSize,contentOffset,contentInset这几个布局相关概念让许多初学者感到困惑。虽然初步了解这几个概念,即可完成大部分界面的布局,但布局较复杂页面时就有点力不从心了。
2. 概念解析
2.1 frame
frame是一个矩形区域,反映当前view相对于它的superview的位置关系,左上角的点(frame.origin)的x,y轴值确定了矩形区域的位置(frame.origin.x, frame.origin.y);宽(frame.size.width)和高(frame.size.height)确定了矩形的面积。
2.2 bounds
bounds与frame类似,同样是一个矩形区域,有与frame一样的属性,但与frame以其父视图为参考不同的是bounds以当前视图为参考,反映的是当前view自己的位置关系。frame和bound都可以使同一个视图(控件)在同一位置。但根据实际情况灵活使用frame和bounds可以使代码逻辑简化,降低布局的相互依赖。
2.3 contentSize
contentSize是UIScrollView和继承于UIScrollView的子控件的属性,contentSize是确定UIScrollView上contentView宽(contentSize.width)和高(conteSize.height)的属性。
UIScrollView可以看成是一个两层的复合视图,如图1所示,上层是固定不动的UIScrollView,下层是可以滑动的contenView,contenView的尺寸可以大于上层的UIScrollView。
2.4 contentOffset
contentOffset是UIScrollView和继承于UIScrollView的子控件的属性,contentOffset确定的是UIScrollView的顶点(左上角点)值相对于其父类视图的顶点值(即frame.origin)的距离。
2.5 contentInset
contentInset是UIScrollView和继承于UIScrollView的子控件的属性,contentInset确定的是contenView上下左右相对于UIScrollView扩展出来的区域大小。contentInset是UIEdgeInsets类型的,默认值为UIEdgeInsetsZero。
3. 总结
frame,bounds,contenSize,contentOffset,contentInset是布局中常用的属性,灵活使用会大大提升开发效率、布局的灵活性和代码的逻辑性,涉及属性的总结如图2所示。
注意:图中contentInset的值为负值
iOS开发frame, contentSize, contentOffset, contentInset 区别联系浅析的更多相关文章
- iOS开发 frame 与 bounds 的区别与关系 转自隔叶黄莺
frame和bounds是UIView中的两个属性(property). frame指的是:该view在父view坐标系统中的位置和大小.(参照点是父亲的坐标系统) bounds指的是:该view在本 ...
- # ios开发 @property 和 Ivar 的区别
ios开发 @property 和 Ivar 的区别 @property 属性其实是对成员变量的一种封装.我们先大概这样理解: @property = Ivar + setter + getter I ...
- [BS-17] iOS开发-Alpha,Hidden和Opaque区别
iOS开发-Alpha,Hidden和Opaque区别 UIView控件都有Alpha,Hidden和Opaque这三个常见属性,UIView控件BackgroundColor是用RGBA表示的, ...
- IOS 中frame与bounds的区别
文章摘要:http://www.sendong.com/news1733.html bounds是指这个view在它自己坐标系的坐标和大小 而frame指的是这个view在它superview的坐标系 ...
- UIScrollview的 约束 contentsize contentoffset contentinset layoutsubviews needlayout等影响布局的属性
很久没有写视图布局,最近发现写布局很不顺手,总结一下在处理UIScrollview的时候种种注意事项: 1. self.automaticallyAdjustsScrollViewInsets = N ...
- iOS开发中各种关键字的区别
1.一些概念 1.浅Copy:指针的复制,只是多了一个指向这块内存的指针,共用一块内存. 深Copy:内存的复制,两块内存是完全不同的, 也就是两个对象指针分别指向不同的内存,互不干涉. 2.atom ...
- scrollView的几个属性contentSize contentOffset contentInset
01- ontentSize是scrollview可以滚动的区域 比如frame = (0 ,0 ,320 ,480) contentSize = (320 ,960), 代表你的scrollvie ...
- iOS开发:setNeedsLayOut和setNeedsDisplay区别
1.layoutSubviews方法 1.1 根据苹果官方帮助文档对layoutSubviews方法的解释: 此方法用来重新定义子元素的位置和大小.当子类重写此方法,用来实现UI元素的更精确布局.如果 ...
- iOS开发多线程篇---atomic nonatomic区别
摘要 atomic和nonatomic区别用来决定编译器生成的getter和setter是否为原子操 作.atomic提供多线程安全,是描述该变量是否支持多线程的同步访问,如果选择了atomic 那么 ...
随机推荐
- C#正则分组实例
static void Main(string[] args) { string str = "大家家家家家家家明天天天天天天天天玩得得得得得得得开心"; Regex reg = ...
- TortoiseGit - 处理冲突
处理冲突 冲突:远程的master已经被其他人更新到 2repo add 12,但是自己当前的工作区在未pull到最新前,增加了1repo add 12的改动. 右击最新的节点,选择Merge to ...
- onbeforeunload与a标签在IE中的冲突bug(转载)
onbeforeunload与a标签在IE中的冲突bug onbeforeunload 是window的一个事件,目前Firefox,IE都支持,主要用来提示用户是否真的要离开该页面,通常在一些比 ...
- 查找一个数组中最小的前n项
/****************************************************************** find the biggest x number in a s ...
- NYOJ-71 独木舟上的旅行 (贪心)
独木舟上的旅行 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客 ...
- 如何通过Maven的Tomcat插件运行Web工程
去tomcat官网http://tomcat.apache.org/,左侧栏Apache Tomcat下的Maven Plugin,点进去选择最新版本Version 2.2 通过介绍可知,使用tomc ...
- grub4dos新手指南-1
对于多数没有或很少接触过linux的windows用户来说,刚开始使用grub时离不开菜单.也就是说,使用grub前,我们要准备menu.lst文件.先讲一些最为常用的命令help用来显示其它命令的用 ...
- 不安装oracle客户端,如何运行sqlplus
1.软件下载 http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html 下载如下三个包: oracle-instantc ...
- Chapter 2 Open Book——14
I backpedaled. "They seemed nice enough to me. I just noticed they keptto themselves. 我改口说道,他们看 ...
- JavaScript在智能手机上的应用-通过滑动修改网页字体大小
---------------------------------- <script type="text/javascript"> //变量x, ...