UIImageView的frame和bounds有什么区别?

10

它们都是CGRects,当我交换其中一个时,我的程序的行为是相同的。


3个回答

5

请参考UIView文档。

frame属性指定了视图在父视图坐标系中的原点和大小。所有视图的坐标系原点都是左上角。

bounds属性指定了视图在自身坐标系中的原点和大小(视图的内容可能会大于bounds的大小)。


1

框架和边界类似,但框架是相对于另一个对象(父视图)的参考而边界则是相对于自身的。

这个问题提供了很多有用的信息,你一定要看一下。

我要从其他答案中特别指出一件事情,那就是你的程序有时候会表现得相同。例如,在旋转方向之前。来自 tristan 的答案

运行此代码:

- (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}} <- frame
{{0, 0}, {768, 1024}} <- bounds

设备方向为横屏

{{0, 0}, {768, 1024}} <- frame
{{0, 0}, {1024, 768}} <- bounds

所以,是的,你的程序通常会表现相同,但并非在所有情况下都如此。


1

1
请注意,仅链接答案是不被鼓励的,SO答案应该是搜索解决方案的终点(而不是另一个指向参考资料的停留点,这些资料往往会随着时间而失效)。请考虑在此处添加独立的概述,将链接作为参考。 - kleopatra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接