为什么UIImageView的图像可以超越自身?

时间:2015-03-02 10:24:40

标签: ios objective-c uiimageview

以前,我认为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)

工作正常:

enter image description here

然而,当我注释这一行时:

imgView.clipsToBounds = true

它变成这样: enter image description here

图像超出了UIImageView

ps:我在这个演示

中没有使用autoLayout

1 个答案:

答案 0 :(得分:0)

这是由于自动布局造成的。 UIImageView通过计算图像大小返回其-intrinsicContentSize。如果你想避免这种情况,你应该设置一个宽度(或高度)约束,或者如果你想在与其他视图一起布局时想要共享空间,那么可以使用content hugging/compression resistance优先级。