Dav*_*vid 43 cocoa objective-c nsview
边界和边框之间有什么区别?事实上,为什么"界限"甚至存在?'bounds'的大小等于帧的大小,bound的起源应始终为0,0.
Dan*_*Dan 91
从适用于iOS 的视图和窗口体系结构编程指南:
视图对象使用其框架,边界和中心属性跟踪其大小和位置:
所述框架属性包含框架矩形,它指定了鉴于它的父的坐标系的尺寸和位置.
该边界属性包含边界矩形,指定视图的视图自己的局部坐标系中尺寸(及其内容来源).
center属性包含superview坐标系中视图的已知中心点.
这是对该解释的良好可视化:

边界的起源并不总是0,0.如果您在滚动期间观察UIScrollView的更改边界属性,则很容易理解框架和边界之间的区别.
例如,您有UIScrollView框架(0,0,320,460),边界(0,0,320,460)和ContentSize(640,460).它的帧总是(0,0,320,460),但边界的X坐标将根据滚动距离而改变.
如果您想要更改UIScrollView中的某些内容(例如,以动态方式创建和删除页面),这将非常有用,因此您需要知道滚动距离.
第一个答案中的苹果文档没有涵盖旋转到横向方向后框架和边界发生的情况.所以为了更完整,你应该知道窗口的框架和根视图在旋转后不会改变,但边界确实如此. 有关详细信息,请参阅此文章,并使用框架作为纵向方向以外的任何参考.
来自文章:
如果您的视图控制器具有顶级非窗口视图(即,它是最底层的视图控制器),那么
Run Code Online (Sandbox Code Playgroud)self.frame始终处于纵向方向.世界卫生大会?是的,总是在纵向 - 你的观点转变了什么变化.所以你的
Run Code Online (Sandbox Code Playgroud)self.bounds总是准确的(记住最后一点),但是
Run Code Online (Sandbox Code Playgroud)self.frame可能会也可能不会给出用户真正看到的宽高比,因为每个视图的帧都是根据超视图的坐标报告的,并考虑了应用于视图的任何变换.