为啥使用两种类型(边界/框架)来描述视图而不是一种?

Posted

技术标签:

【中文标题】为啥使用两种类型(边界/框架)来描述视图而不是一种?【英文标题】:why using two types (bounds/frame) to describe a view instead of one?为什么使用两种类型(边界/框架)来描述视图而不是一种? 【发布时间】:2012-04-13 17:53:43 【问题描述】:

我想知道为什么有两种类型(边界/框架)来描述视图。由于更改视图的 bounds.size.* 也会更改该视图的 frame.size.* ,反之亦然,这意味着 frame 和 bounds 之间的唯一区别是它们的原点,那么为什么我们需要两种不同的类型来描述视图几何?顺便说一下,bounds.origin 到底是什么意思?

【问题讨论】:

Why is there an frame rectangle and an bounds rectangle in an UIView? 的可能重复项 【参考方案1】:

取自 CocoaDev:

frame 在视图的superview 的坐标空间中表示。 边界在视图的自己的坐标空间中表达。

视觉解释(Apple Developer Reference):

参考:http://developer.apple.com/documentation/Cocoa/Conceptual/DrawViews/Concepts/ViewHierarchy.html

【讨论】:

谢谢,但我知道框架/边界之间的区别(问题已更新,抱歉),但我只是想知道为什么我们需要两种类型来描述视图,因为两者的大小框架/边界是相同的。 @mf25 好吧...让我们这样看:如果我们只关心大小,那么我想苹果会弃用 boundsframe 并留下 widthheight 财产。 boundsframe 存在的原因是它们返回的 NSRect 结构(除 size.widthsize.height 属性之外)包括起始 (X,Y) 坐标。在这方面,如上所示,它们肯定是不同的...... :-) 边界可以更大,并且与框架有不同的来源;例如,这就是滚动视图的工作方式。当用户移动边界时,滚动视图的框架保持固定。

以上是关于为啥使用两种类型(边界/框架)来描述视图而不是一种?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 ListView 项目重叠而不是滚动?

为啥在python里推荐使用多进程而不是多线程

为啥边界值不叫粗细?

为啥 pytz 在跨越 TZ 和 DST 边界而不是 TZ 名称时正确调整时间和偏移量?

为啥使用 DataSource 而不是 XADataSource?

为啥电子邮件在正文中显示 mime 边界/