以前,我认为UIImageView的图像不能超出视图范围。但是,最近我读了在IOS8中编程这本书,它说:
你还应该注意UIImageView的clipsToBounds属性;如果它是假的,它的图像,即使它大于图像视图,即使它没有被contentMode按比例缩小,也可以整体显示,延伸到图像视图本身之外。
然后我做了一些简单的测试,这是真的。
以下是问题:Apple使用此功能设计UIImageView
的目的是什么?我现在找不到它的优点。我认为这会使contentMode
成为虚假财产。
以下是一个例子:
这是一个带有UITableView
上面的自定义拉动刷新动画的refreshView。我设置了一个与refreshView相同大小的UIImageView
,并将其添加为背景视图。相关代码:
let imgView = UIImageView()
imgView.frame = self.bounds
imgView.image = UIImage(named: "refresh-view-bg.png")
imgView.contentMode = .ScaleAspectFill
imgView.clipsToBounds = true
self.addSubview(imgView)
工作正常:
然而,当我注释这一行时:
imgView.clipsToBounds = true
它变成这样:
图像超出了UIImageView
ps:我在这个演示
中没有使用autoLayout答案 0 :(得分:0)
这是由于自动布局造成的。 UIImageView通过计算图像大小返回其-intrinsicContentSize。如果你想避免这种情况,你应该设置一个宽度(或高度)约束,或者如果你想在与其他视图一起布局时想要共享空间,那么可以使用content hugging/compression resistance优先级。