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 那么 ...
随机推荐
- Android常用Permission
位置相关: android.permission.WRITE_GSERVICES 允许程序修改Google服务地图(Allows an application to modify the Google ...
- centos 7上搭建HDP2.3集群
centos 7上安装 cat /etc/redhat-release
- [ An Ac a Day ^_^ ] FZU 2030 括号问题 搜索
FZU一直交不上去 先写在这吧 #include<stdio.h> #include<iostream> #include<algorithm> #include& ...
- chapter 13_3 table访问的元方法
前两节的算术类.关系类运算符的元方法都为各种错误情况定义了行为,它们不会改变语言的常规行为. 但是Lua还提供了两种可以改变table行为的方法: 一种是查询table中不存在的字段.一种是修改tab ...
- SharePoint 2013 工作流设计之Designer 使用“可视化视图
转载自:http://www.cnblogs.com/jianyus/p/3406309.html SharePoint 2013增强了工作流功能,而Designer里面也添加了可视化设计视图,也就是 ...
- 2015 ACM/ICPC Asia Regional Shenyang Online
1001 Traversal 1002 Best Solver 1003 Minimum Cut 类似于POJ 3417的做法. 考虑每条新边对树边的覆盖次数. 每条树边被覆盖的次数其实就是断裂这条树 ...
- use 2 stacks to simulate a queue
class Stack{ private: ; ]; public: void push(int n); int pop(); int peek(); int size(); }; void Stac ...
- jquery ui sortable 实现table,row的拖动。(Make Table Rows Sortable Using jQuery UI Sortable)
// Return a helper with preserved width of cells var fixHelper = function(e, ui) { //console.log(ui) ...
- CVE-2014-1767 漏洞分析(2015.1)
CVE-2014-1767 漏洞分析 1. 简介 该漏洞是由于Windows的afd.sys驱动在对系统内存的管理操作中,存在着悬垂指针的问题.在特定情况下攻击者可以通过该悬垂指针造成内存的doubl ...
- Android Binder机制原理(史上最强理解,没有之一)(转)
原文地址: http://blog.csdn.net/universus/article/details/6211589 Binder是Android系统进程间通信(IPC)方式之一.Linux已经拥 ...