UIView和它的子类都有frame和bounds属性。有什么不同?
当前回答
以上所有答案都是正确的,以下是我的看法:
为了区分框架和边界概念,开发者应该阅读:
相对于父视图(父视图),它包含在= FRAME中 相对于它自己的坐标系,决定了它的子视图location = BOUNDS
"bounds"是令人困惑的,因为它给人的印象是坐标是它所设置的视图的位置。但这些是有关系的,可以根据坐标系常数进行调整。
其他回答
试着运行下面的代码
- (void)viewDidLoad {
[super viewDidLoad];
UIWindow *w = [[UIApplication sharedApplication] keyWindow];
UIView *v = [w.subviews objectAtIndex:0];
NSLog(@"%@", NSStringFromCGRect(v.frame));
NSLog(@"%@", NSStringFromCGRect(v.bounds));
}
这段代码的输出是:
机箱设备方向为纵向
{{0, 0}, {768, 1024}}
{{0, 0}, {768, 1024}}
机箱设备方向为横向
{{0, 0}, {768, 1024}}
{{0, 0}, {1024, 768}}
显然,你可以看到框架和边界之间的区别
让我加上我的5美分。
视图的父视图使用Frame将其放置在父视图中。
视图本身使用Bounds来放置它自己的内容(就像滚动视图在滚动时所做的那样)。请参见clipsToBounds。边界也可以用来放大/缩小视图的内容。
类比: 框架~电视屏幕 边界~相机(缩放,移动,旋转)
Frame相对于SuperView,而Bounds相对于NSView。
例子:40 X = Y = 60。也包含3个视图。这张图向你展示了清楚的想法。
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中 相对于它自己的坐标系,决定了它的子视图location = BOUNDS
"bounds"是令人困惑的,因为它给人的印象是坐标是它所设置的视图的位置。但这些是有关系的,可以根据坐标系常数进行调整。
推荐文章
- Xcode构建失败“架构x86_64未定义的符号”
- 新的自动引用计数机制是如何工作的?
- 是否有可能禁用浮动头在UITableView与UITableViewStylePlain?
- 从Cocoa应用程序执行一个终端命令
- 如何使用UIVisualEffectView来模糊图像?
- 自动调整掩码大小编程vs接口生成器/ xib / nib
- 我如何输入RGB值到接口生成器?
- 裁剪一个UIImage
- 在这个块中强烈地捕获self很可能导致保留循环
- iPhone上UIView和UILabels的渐变
- 自动布局- UIButton的固有大小不包括标题插入
- 如何更改导航栏上“后退”按钮的标题
- 有没有办法从UITableView中移除分隔线?
- 如何在Objective-C中声明类级属性?
- 改变UISegmentedControl的字体大小