在iOS中,每个控件都是继承于UIView的,都会有视图的属性存在,控制这个视图的位置就有Frame和Bounds两个属性

frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)其中的坐标是我的左上角坐标相对于我的父视图左上角的坐标。如果我修改坐标,x+50,y+50,那么我就会相对于我的父视图移动,相对于父视图,我向右移动50,向下移动50

bounds指的是:该view在本身坐标系统中的位置和大小。(参照点是本身坐标系统)其中的坐标是我的子视图左上角的坐标相对与我的左上角的坐标。如果我修改坐标,x+50,y+50,那么我的子视图就会相对我进行移动,相对于我,子视图向左移动50,向上移动50

-(CGRect)frame{

returnCGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);

}

-(CGRect)bounds{

,self.frame.size.width,self.frame.size.height);

}

实际使用情况是这样的:

1.如果我在a视图,我需要在a视图下创建一个子视图b,并规定b视图相对于a视图的坐标和大小,使用Frame即可,不需要对Bounds做任何操作

UIView * a;

UIView * b;

[a addSubview:b];

b., , , );

2.如果我在b视图,我是a视图的子视图,我想要修改我自己的大小,但是我又不想知道我相对于a视图的坐标,那就使用Bounds,origin都设为0

b., , , );

3.如果我在b视图,我是a视图的子视图,我想要重新设计我的视图的坐标,方便我创建我的自己的子视图时的坐标转换,那么我就可以设置Bounds,origin的大小就是我左上角的坐标,我再创建的子视图就会以我的这个坐标来进行参照坐标

, b.bounds.size.width, b.bounds.size.height);

4.如果我是b视图,我的视图旋转了,我的Frame和Bounds就会演变成下面的样子

以上所述的1和2场景比较常见,其它场景都是及其少见,如果你想修改坐标,就使用Frame,如果你想修改大小,就使用Bounds

iOS中控件的Frame属性和Bounds属性的区别的更多相关文章

  1. WPF中控件的显示与隐藏

    1.WPF中控件的显示与隐藏的属性是 Visibility,它有3个枚举值 Visible, Hidden 和 Collapsed.其中Visible为可见,而 Hidden 和 Collapsed ...

  2. iOS开发UI篇—手写控件,frame,center和bounds属性

    iOS开发UI基础—手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...

  3. iOS开发UI基础—手写控件,frame,center和bounds属性

    iOS开发UI基础—手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...

  4. 手写控件,frame,center和bounds属性

    一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View ...

  5. 彩票案例-frame,center和bounds属性

    控件的属性: 二.frame.center和bounds属性 " 在iOS中,每一个控件都是继承于UIView的.都会有视图的属性存在,控制这个视图的位置就有Frame和Bounds两个属性 ...

  6. ios 中直接修改frame里边某个属性的简便方法

    参考:http://www.cnblogs.com/wengzilin/p/4359865.html 在iOS中view的frame属性使用地太频繁了,尤其是调UI的时候.我们知道,正常情况下我们无法 ...

  7. 与导航栏下控件的frame相关的edgesForExtendedLayout、translucent、extendedLayoutIncludesOpaqueBars、automaticallyAdjustsScrollViewInsets等几个属性的详解

    在引入了导航控制器UINavigationController和分栏控制器UITabBarController之后,我们在设置控件的frame的时候就需要注意避开导航栏UINavigationBar ...

  8. C#中控件的CheckState和Checked属性区别?

    Checked 和CheckState都是检查控件选中状态,都能判断是否选中控件. 只是Checked 通过布尔判断(true & false): CheckState 通过枚举判断. che ...

  9. IOS 设置子控件的frame(layoutSubviews and awakeFromNib)

      如果控件是通过xib或者storyboard创建出来的就会调用该方法 - (void)awakeFromNib :该方法只会调用一次 // 如果控件是通过xib或者storyboard创建出来的就 ...

随机推荐

  1. python基础知识八

    当你的程序中出现某些 异常的 状况的时候,异常就发生了.例如,当你想要读某个文件的时候,而那个文件不存在.或者在程序运行的时候,你不小心把它删除了.上述这些情况可以使用异常来处理. 如你的程序中有一些 ...

  2. css - div垂直方向滚动

    只要设置 OVERFLOW-Y:auto;OVERFLOW-X:hidden即可.

  3. SQL学习:查询的用法(1)

    在SQL servre的使用中,查询的用法是最多的.最重要的,也是最难学习的,因此掌握查询的用法很重要. 先将表的示例上图 员工表: 部门表:                             ...

  4. Oracel JDBC URL 和 Driver 的获取

    Driver 的获取 Driver Name:   oracle.jdbc.driver.OracleDriver Oracel JDBC URL的获取: URL:   jdbc:oracle:thi ...

  5. 查看当前linux系统位数

    linux系统也有位数之分,所以在linux上安装一些软件,比如jdk之类的就需要注意下版本. 查看linux系统位数最简单的命令(这里以redhat为例,不同版本linux命令也许不同) 命令1:g ...

  6. vector预分配空间溢出

    vector 当一个vector预分配的存储空间用完之后,为维护其连续的对象数组,它必须在另外一个地方重新分配大块新的(更大的)存储空间,并把以前已有的对象拷贝到新的存储空间中去. // A clas ...

  7. [Introduction to programming in Java 笔记] 1.3.9 Factoring integers 素因子分解

    素数 A prime is an integer greater than one whose only positive divisors are one and itself.整数的素因子分解是乘 ...

  8. C++ 中的权限控制

    权限控制,指的是用户只能访问符合自己权限的资源,系统对用户进行权限控制以防止用户的误操作/恶意操作等. 在C++代码中,权限控制指的是程序员在接口声明/类声明/函数声明等中进行的授权控制.如下面的代码 ...

  9. mysql备份,还原命令

    mysql导出数据1.导出整个数据库mysqldump -u用户名 -p 数据库名 >备份文件2.导出一个表mysqldump -u用户名 -p databaseName tablename & ...

  10. 【python之旅】python的面向对象

    一.面向过程 VS 面向对象 1.编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,实现一个任务的 ...