UIView及NSView等控件常有的frame和bounds有何不同呢?

UIView的bounds是一个矩形,它表示在自身坐标系中的位置(x、y)和大小(width、height)。

UIView的frame也是一个矩形,它表示该视图在父视图坐标系中的位置(x、y)和大小(width、height)。

因此,假设现在有view大小为100x100,在父视图的位置为(25,25),如下代码打印出bounds和frame:

- (void)viewDidLoad {[super viewDidLoad];NSLog(@"bounds.origin.x: %f", label.bounds.origin.x);NSLog(@"bounds.origin.y: %f", label.bounds.origin.y);NSLog(@"bounds.size.width: %f", label.bounds.size.width);NSLog(@"bounds.size.height: %f", label.bounds.size.height);NSLog(@"frame.origin.x: %f", label.frame.origin.x);NSLog(@"frame.origin.y: %f", label.frame.origin.y);NSLog(@"frame.size.width: %f", label.frame.size.width);NSLog(@"frame.size.height: %f", label.frame.size.height);
}

输出结果如下:

bounds.origin.x: 0
bounds.origin.y: 0
bounds.size.width: 100
bounds.size.height: 100frame.origin.x: 25
frame.origin.y: 25
frame.size.width: 100
frame.size.height: 100

我们可以看到,在这两种情况下,视图的bounds还是frame中宽度和高度都是相同的,不同的是视图的x、y的位置。在bounds的情况下,x和y坐标是(0,0)因为这些坐标相对于视图本身。然而,frame的x和y坐标相对于视图在父视图中的位置(之前我们说过是在(25,25))。

图文并茂

当bounds和frame为如下值时:

Frameorigin = (0, 0)width = 80height = 130Bounds origin = (0, 0)width = 80height = 130

效果如下:

这幅图的框架和边界是完全一样的。让我们看一个它们不同的例子。

Frameorigin = (40, 60)  // That is, x=40 and y=60width = 80height = 130Bounds origin = (0, 0)width = 80height = 130

使用场合

因为frame与视图在父视图中的位置相关,所以当您向外进行更改时,比如更改其宽度或查找视图与父视图顶部之间的距离时,就会使用它。

当您向内进行更改时,如绘制内容或在视图中安排子视图时,请使用bounds。如果你对视图做了一些变形,也可以使用bounds来获得视图的大小。

老生常谈:frame和Bounds的区别相关推荐

  1. frame 和 bounds的区别

    这篇是见过写的最为详细易懂的文章: frame与bounds的区别详解 - 简书 简单概括下: 1.bounds和frame都是属于CGRect类型的结构体,系统的定义如下,包含一个CGPoint(起 ...

  2. 【转】frame与bounds的区别比较

    翻译文档上的bounds是指这个view在它自己坐标系的坐标和大小 而frame指的是这个view在它superview的坐标系的坐标和大小区别主要在坐标系这一块.很明显一个是自己为原点的坐标系,一个 ...

  3. frame与bounds的区别比较

    翻译文档上的
bounds是指这个view在它自己坐标系的坐标和大小 而frame指的是这个view在它superview的坐标系的坐标和大小
区别主要在坐标系这一块.

很明显一个是自己为原点的坐标 ...

  4. 完结之frame和bounds的区别

    回顾上集,我写了frame和bounds在x.y上的区别,以及简单的描述frame的width和height.这次,继续前集但又不同于前集.继续前集,我是想把bounds的width和height讲完 ...

  5. iOS bug 日志 -frame 和 bounds的区别

    使用显式动画,如果设置layer 的bounds和frame效果是不一样的 如果设置 self.layer.bounds = CGRectMake(0, 0, width, width); 效果如图 ...

  6. frame 和bounds 的区别

    二者都是方的. bounds 对内 不包含自身 相对 superView的 位置 frame 对外 包括自身相对 superView的坐标 self.bounds= CGRectMake(0,0,se ...

  7. frame、bounds表示大小和位置的属性以及center、position、anchorPosition

    在iOS开发开发过程中经常会用到界面元素的frame.bounds表示大小和位置的属性以及center.position.anchorPosition等单纯表示位置的属性.这些属性究竟什么含义?彼此间 ...

  8. ios开发之UIView的frame、bounds跟center属性的区别(附图)

    博文暂时想到什么写什么,不顺理成章,不顺章成篇. 先看几个概念 坐标点Poit:向右侧为X轴正方向的值x,原点下侧为Y轴正方向的值y 大小Size:由宽度width和高度height构成,表示一个矩形 ...

  9. iOS中frame和Bounds之间的区别

    frame frame是每个view必备的属性,代表的是当前视图的位置和大小,没有设置他,当前视图是看不到的.位置需要有参照物才能确定,数学中我们用坐标系来确定坐标系中的某个点的位置,iOS中有他特有 ...

  10. iOS开发-View中frame和bounds区别

    开发中调整View的时候的经常会遇到frame和bounds,刚开始看的时候不是很清楚,不过看了一下官方文档,frame是确定视图在父视图中的位置,和本身的大小,bounds确定可以确定子视图在当前视 ...

最新文章

  1. SUBSTRING函數用法
  2. ie 报错 vuex requires a Promise polyfill in this browser
  3. Oracle从软件安装到运行的全流程
  4. 在ASP.NET Core下使用SignalR技术
  5. angular4更改表单中显示的值_angular4 Form表单相关
  6. springboot 打包_springboot打包-体积太大怎么办
  7. php mysql 替换 pdo,php操作MySQL数据库之PDO方式
  8. 当电信诈骗犯遇上程序员,技术决定成败!
  9. 第二次Soring冲刺计划第一天(团队)
  10. 解决tshark报错:tshark: Some fields aren‘t valid
  11. (21)FPGA资源共享
  12. 投资大佬段永平:抄底腾讯,不等了!
  13. HIVE 的笛卡尔积on无条件
  14. 公钥、私钥和数字签名是什么
  15. 深刻揭露步态识别的“谎言”(篇一)
  16. 电脑罗盘时钟html怎么设置成桌面,抖音网红款Word Clock罗盘时钟电脑桌面屏保设置教程-完整版...
  17. 3Dmax有哪些方法设置添加VR材质
  18. 003 IP网络技术基础
  19. 送你一波运维背锅专用图~
  20. 车内静谧性超越埃尔法?走进腾势D9身价上亿的NVH实验室

热门文章

  1. 怎么能防止网站被注入eval(base64_decode这种类型的木马?
  2. vim 配置(有插件)
  3. 怎么查询IP段所对应的IP总数、网络地址、可用IP数量及范围、网关、子网掩码、广播地址呢?/29 服务器包含多少IP地址?
  4. Kotlin基础2(持续更新)
  5. 百度Unit 2.0平台学习理解
  6. 利用组策略部署软件——将软件发布给用户
  7. 电信计费系列3-短信计费
  8. 美国网络再次“瘫痪”,华为意外“出头”,网络服务器世界第一
  9. 盲盒抽奖微信小程序源码
  10. no jdk specified