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。

图1 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所示。

图2 布局相关属性之间关系

注意:图中contentInset的值为负值

 

转载自:http://www.jianshu.com/p/c36d3fb3c833 

iOS开发frame, contentSize, contentOffset, contentInset 区别联系浅析的更多相关文章

  1. iOS开发 frame 与 bounds 的区别与关系 转自隔叶黄莺

    frame和bounds是UIView中的两个属性(property). frame指的是:该view在父view坐标系统中的位置和大小.(参照点是父亲的坐标系统) bounds指的是:该view在本 ...

  2. # ios开发 @property 和 Ivar 的区别

    ios开发 @property 和 Ivar 的区别 @property 属性其实是对成员变量的一种封装.我们先大概这样理解: @property = Ivar + setter + getter I ...

  3. [BS-17] iOS开发-Alpha,Hidden和Opaque区别

    iOS开发-Alpha,Hidden和Opaque区别   UIView控件都有Alpha,Hidden和Opaque这三个常见属性,UIView控件BackgroundColor是用RGBA表示的, ...

  4. IOS 中frame与bounds的区别

    文章摘要:http://www.sendong.com/news1733.html bounds是指这个view在它自己坐标系的坐标和大小 而frame指的是这个view在它superview的坐标系 ...

  5. UIScrollview的 约束 contentsize contentoffset contentinset layoutsubviews needlayout等影响布局的属性

    很久没有写视图布局,最近发现写布局很不顺手,总结一下在处理UIScrollview的时候种种注意事项: 1. self.automaticallyAdjustsScrollViewInsets = N ...

  6. iOS开发中各种关键字的区别

    1.一些概念 1.浅Copy:指针的复制,只是多了一个指向这块内存的指针,共用一块内存. 深Copy:内存的复制,两块内存是完全不同的, 也就是两个对象指针分别指向不同的内存,互不干涉. 2.atom ...

  7. scrollView的几个属性contentSize contentOffset contentInset

    01-  ontentSize是scrollview可以滚动的区域 比如frame = (0 ,0 ,320 ,480) contentSize = (320 ,960), 代表你的scrollvie ...

  8. iOS开发:setNeedsLayOut和setNeedsDisplay区别

    1.layoutSubviews方法 1.1 根据苹果官方帮助文档对layoutSubviews方法的解释: 此方法用来重新定义子元素的位置和大小.当子类重写此方法,用来实现UI元素的更精确布局.如果 ...

  9. iOS开发多线程篇---atomic nonatomic区别

    摘要 atomic和nonatomic区别用来决定编译器生成的getter和setter是否为原子操 作.atomic提供多线程安全,是描述该变量是否支持多线程的同步访问,如果选择了atomic 那么 ...

随机推荐

  1. HTTP Request GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE Methods

    注:本文为个人学习摘录,原文地址为:http://javaeedevelop.iteye.com/blog/1725299 An HTTP request is a class consisting ...

  2. OMCS开发手册(02) -- 多媒体连接器

    OMCS开发手册(01) -- 多媒体设备管理器 一文,我们从Owner的角度详细描述了多媒体设备管理器的使用,本文我们将站在Guest的角度,描述OMCS中另一类组件/控件:多媒体连接器.多媒体连接 ...

  3. inode和文件描述符区别

    inode 或i节点是指对文件的索引.如一个系统,所有文件是放在磁盘或flash上,就要编个目录来说明每个文件在什么地方,有什么属性,及大小等.就像书本的目录一样,便于查找和管理.这目录是操作系统需要 ...

  4. apicloud

    <!doctype html> <html class="no-js"> <head> <meta charset="utf-8 ...

  5. CALayer的隐式动画和显式动画

    隐式事务 任何对于CALayer属性的修改,都是隐式事务,都会有动画效果.这样的事务会在run-loop中被提交. - (void)viewDidLoad { //初始化一个layer,添加到主视图 ...

  6. 修改select选中项

    /** * 设置select选中 * @param selectId select的id值 * @param checkValue 选中option的值 */ function setSelectCh ...

  7. ValueStack背后的OGNL表达式

    原文地址:http://blog.csdn.net/li_tengfei/archive/2010/12/25/6098134.aspx 前言: Strut2的Action类通过属性可以获得所有相关的 ...

  8. 8636 跳格子(dfs+记忆化搜索)

    8636 跳格子 该题有题解 时间限制:2457MS  内存限制:1000K提交次数:139 通过次数:46 题型: 编程题   语言: G++;GCC Description 地上有一个n*m 的数 ...

  9. 小飞淙在博客上的第一天——NOIP201505转圈游戏

    原本我是在word文档上写这种东西的,在杨老师的“强迫”下,我开始写了博客. 这是我在博客上的第一天,就先来个简单的,下面请看题: 试题描述  有n个小伙伴(编号从0到n-1)围坐一圈玩游戏.按照顺时 ...

  10. windows7所有版本

    windows7所有版本迅雷地址下载集合(含32位和64位) Windows7 SP1旗舰版 32位官方原版下载: ed2k://|file|/cn_windows_7_ultimate_with_s ...