我有一个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子视图。
答案 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;