如果我将view.bounds.origin设置为(50,50),则绘制(50,50)子视图以便查看.但我认为它应该是反向结果,那么bounds.origin是什么意思?
对不起,伙计们,我不是母语为英语的人,所以这次我把这个示例代码和图像~~
subview = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
subview.backgroundColor = [UIColor blueColor];
subview.bounds = CGRectMake(50, 50, 200, 200);
subsubview = [[UIView alloc] initWithFrame:CGRectMake(0, 0,100,100)];
subsubview.backgroundColor = [UIColor yellowColor];
[subview addSubView:subsubView];
Run Code Online (Sandbox Code Playgroud)
这会导致这个结果:

为什么黄色的视图位于那里?
从文档:
在屏幕上,边界矩形表示视图与其框架矩形相同的可见部分.默认情况下,bounds矩形的原点设置为(0,0),但您可以更改此值以显示视图的不同部分.
你通过改变所做的bounds就是有效地将subView内部坐标空间向下和向右平移50个点.然后你在subView's坐标空间内添加了原点为0,0的'subsubView' - 因此它在可见原点的左边50点处subView.
如果你设置了subView's frame而不是bounds,那么你会subView在它的superview的坐标空间内移动,所以你的蓝色方块会向上移动到左边,黄色方块将包含在其中并具有相同的原点.
设置bounds为不具有(0,0)原点的东西类似于向视图添加翻译.在几乎所有情况下,这不是您想要做的,您应该设置frame属性.视图层次结构中的每个视图都有自己的坐标空间.frame是视图与其超视图相关的位置,bounds是视图中的空间.
因此,子视图在超视图中frame描述了它的位置和大小bounds.如果超级视图bounds具有非零原点,并且您添加了frame具有零原点的子视图,则它将超出超视图的界限.
| 归档时间: |
|
| 查看次数: |
4064 次 |
| 最近记录: |