在开发中经常使用这两个属性,但是一直没有去真正理解,导致了好多情况把自己弄晕了,所以这次决定,花点时间去查一下,两者的区别
举个栗子1:
在storyboard中拖入一个view, 然后用代码创建一个imageView, 让其加入到view中
代码如下:
var image =UIImage(named:"a")
var imageView =UIImageView(image: image)
imageView.frame=view.frame
view.addSubview(imageView)
效果如下
打印view的frame 和 bounds 如下
(165.0,184.0,200.0,200.0)
(0.0,0.0,200.0,200.0)
经过网上查询,
于是改成下面这样
var image =UIImage(named:"a")
var imageView =UIImageView(image: image)
imageView.frame=view.bounds
view.addSubview(imageView)
得到了正常的效果
下面我们来分析一下,frame是以父视图左上角位置为(0,0)点, 而bounds是以自身的左上角为(0.0)点算起
第一种情况之所以会跑偏, 是因为我们设置imageview.frame = view.frame
刚才说了frame是以父视图(0,0)为起点, 之前打印的view frame为(165,184,200,200),
这就意味着imageview是起点是以父视图view的(0,0)为起点,偏移165,184), 所以就跑偏了,
第二种情况,我们把imageview.frame = view.bounds, 而bounds是以自身的左上角为(0.0)点算起, 打印出view 的bounds为(0,0,200,200), 这样,imageview的起点就是以父视图(0,0)为起点,偏移(0,0), 这样就正好坐落在父视图的区域中了。