UIView和它的子类都有frame和bounds属性。有什么不同?
当前回答
iOS框架与边界
frame and bounds有CGRect类型,这些属性你可以在UIView和CALayer中找到[关于]
Frame与边界、位置、变换有直接关系:
(x, y)依赖于parenView和 (宽度,高度)被边界占据的完整矩形。
范围:
(x, y) = 0,0 (width, height)是视图的宽度和高度
再举一个例子来说明框架和边界之间的区别。 在这个例子中:
视图B是视图a的子视图 视图B被移动到x:72, y: 22 视图B旋转了45度
let viewB = UIView(frame: CGRect(origin: CGPoint(x: 72, y: 22), size: CGSize(width: 20, height: 40)))
viewB.backgroundColor = .cyan
let radian = 45 * CGFloat.pi / 180
viewB.transform = CGAffineTransform(rotationAngle: radian)
viewA.addSubview(viewB)
[iOS像素、点数、单位]
其他回答
Frame相对于SuperView,而Bounds相对于NSView。
例子:40 X = Y = 60。也包含3个视图。这张图向你展示了清楚的想法。
以上所有答案都是正确的,以下是我的看法:
为了区分框架和边界概念,开发者应该阅读:
相对于父视图(父视图),它包含在= FRAME中 相对于它自己的坐标系,决定了它的子视图location = BOUNDS
"bounds"是令人困惑的,因为它给人的印象是坐标是它所设置的视图的位置。但这些是有关系的,可以根据坐标系常数进行调整。
Frame是视图在它的父视图坐标系中的原点(左上角)和大小,这意味着你在它的父视图中通过改变帧原点来转换视图,另一方面,边界是它自己坐标系中的大小和原点,所以默认情况下边界原点是(0,0)。
大多数情况下,框架和边界是相等的,但如果你有一个框架((140,65),(200,250))和边界((0,0),(200,250))的视图,并且视图倾斜到它的右下角,那么边界仍然是((0,0),(200,250)),但框架不是。
框架将是封装/包围视图的最小矩形,因此框架(如照片中的)将是((140,65),(320,320))。
另一个区别是,例如,如果你有一个边界为((0,0),(200,200)的superView,这个superView有一个框架为((20,20),(100,100)的子view,你把superView的边界改为((20,20),(200,200)),那么子view的框架仍然是((20,20),(100,100)),但是被(20,20)偏移,因为它的父视图坐标系被(20,20)偏移。
我希望这能帮助到一些人。
让我加上我的5美分。
视图的父视图使用Frame将其放置在父视图中。
视图本身使用Bounds来放置它自己的内容(就像滚动视图在滚动时所做的那样)。请参见clipsToBounds。边界也可以用来放大/缩小视图的内容。
类比: 框架~电视屏幕 边界~相机(缩放,移动,旋转)
框架与边界
If you create a view at X:0, Y:0, width:400, height:400, its frame and bounds are the same. If you move that view to X:400, its frame will reflect that change but its bounds will not. Remember, the bounds is relative to the view’s own space, and internally to the view nothing has changed. If you transform the view, e.g. rotating it or scaling it up, the frame will change to reflect that, but the bounds still won’t – as far as the view is concerned internally, it hasn’t changed. If you change the bounds then it will change the content inside the frame because the origin of the bounds rectangle starts at a different part of the view.
推荐文章
- 如何从UIImage (Cocoa Touch)或CGImage (Core Graphics)获取像素数据?
- 在Swift中如何调用GCD主线程上的参数方法?
- iOS -构建失败,CocoaPods无法找到头文件
- 为什么单元测试中的代码不能找到包资源?
- Xcode构建失败“架构x86_64未定义的符号”
- 新的自动引用计数机制是如何工作的?
- 是否有可能禁用浮动头在UITableView与UITableViewStylePlain?
- 从Cocoa应用程序执行一个终端命令
- 如何使用UIVisualEffectView来模糊图像?
- 自动调整掩码大小编程vs接口生成器/ xib / nib
- 我如何输入RGB值到接口生成器?
- 裁剪一个UIImage
- 在这个块中强烈地捕获self很可能导致保留循环
- iPhone上UIView和UILabels的渐变
- 自动布局- UIButton的固有大小不包括标题插入