frame 与 bounds的区别

Posted wangbaixue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了frame 与 bounds的区别相关的知识,希望对你有一定的参考价值。

今天在使用ios UICollectionView时,需要在collectionview的每一个item上添加一个label类型的子view。代码中设置了每一行显示七个item。

刚开始,我添加subview的方式如下:

[[UILabel alloc] initWithFrame:self.frame];

运行出的结果如下:

技术分享

可以看到,只有四个label被显示出来了。

但是如果将label的初始化代码改为:

[[UILabel alloc] initWithFrame:self.bounds];

运行的结果就正常,如下图:

技术分享

那么,frame与bounds到底有什么区别呢?

从上面两张图可以看出,第一张图的label的坐标很明显超出了item的范围。frame是指相对于父视图的坐标系。所以,每次初始化一个label的时候,它相对于item的x坐标为item的x坐标,而item的x坐标随着item的增多而不断增大,所以label的相对坐标也在不断增大,因此偏移出了item的范围。

而bounds是指一个view相对于它本身的坐标。默认情况下是(0,0),因此在给一个item添加label子view的时候,应该使用的是bounds,才不会造成偏移。

下图是frame和bounds关系图解:

技术分享

 

以上是关于frame 与 bounds的区别的主要内容,如果未能解决你的问题,请参考以下文章

iOS frame和Bounds 以及frame和bounds区别

iOS frame和Bounds 以及frame和bounds区别

ios view的frame和bounds之区别(位置和大小)

iOS界面篇 - bounds和frame的相同和区别

ios view的frame和bounds之区别(位置和大小)

frame和bounds的区别