UIImage缩放方面填充和剪辑子视图在UICollectionView中不起作用

时间:2015-07-10 01:23:48

标签: ios iphone uiimageview uicollectionview

我有一个UICollectionView,其中包含一个包含单个UIImageView的单元格。我正在设置UIImageView frame.size以匹配单元格的frame.size,并明确要求UIImageView使用Aspect Fill&在 cellForItemAtIndexPath 方法中按以下方式剪辑子视图:

let cell:UICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! UICollectionViewCell

... 

var imageView = UIImageView(image: self.eventImages[indexPath.row])
imageView.frame.size = cell.frame.size
cell.contentMode = UIViewContentMode.ScaleAspectFill
cell.clipsToBounds = true
imageView.contentMode = UIViewContentMode.ScaleAspectFill
imageView.clipsToBounds = true
cell.addSubview(imageView)

结果是伸展的图像(图片A),但是当我点击(点按)图像时,它“神奇地”解析了Aspect Fill&剪辑子视图(图片B)。我似乎无法理解为什么只有在点击之后才发生这种情况,而不是第一次加载图像时。它们以异步方式提取到服务器,但只在点击图像后才会进行缩放(也没有实现抽头功能)。

注意:UICollectionView在故事板视图控制器中设置,集合视图和可重用单元都启用了Aspect Fill和Clip子视图。

图片A(错误缩放 - 拉伸并且没有裁剪):

IMG A

图片B(点按后正确缩放):

IMG B

3 个答案:

答案 0 :(得分:16)

这样做非常简单:

imageView.contentMode = UIViewContentMode.ScaleAspectFill;
imageView.layer.masksToBounds = YES;

答案 1 :(得分:6)

我认为你应该使用:

imageView.contentMode = UIViewContentMode.ScaleAspectFill
imageView.clipsToBounds = true

而不是:

  cell.contentMode = UIViewContentMode.ScaleAspectFill
  cell.clipsToBounds = true

答案 2 :(得分:0)

[yourImageView setContentMode:UIViewContentModeScaleAspectFill];  yourImageView.layer.masksToBounds = YES;