UIImage Scale Aspect Fill 和 Clip Subviews 在 UICollectionView 中不起作用

UIImage Scale Aspect Fill and Clip Subviews not working in UICollectionView

提问人:Fdo 提问时间:7/10/2015 更新时间:11/17/2023 访问量:19984

问:

我有一个 UICollectionView,其中包含一个包含单个 UIImageView 的单元格。我将UIImageView frame.size设置为与单元格的frame.size匹配,并在cellForItemAtIndexPath方法中按以下方式显式要求UIImageView使用Aspect Fill & Clip Subview进行缩放:

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),但是当我单击(点击)图像时,它“神奇地”解析了纵横比填充和剪辑子视图(图像 B)。我似乎不明白为什么这种情况只发生在点击之后,而不是第一次加载图像时。它们以异步方式提取到服务器,但缩放仅在点击图像后发生(也没有实现点击功能)。

注意:UICollectionView 是在情节提要视图控制器中设置的,“集合视图”和“可重用单元格”都启用了“纵横比填充”和“剪辑子视图”。

图像 A(缩放错误 - 拉伸且未裁剪):

IMG A

图像 B(点击后正确缩放):

IMG B

iOS iPhone UIImageView UIColictionView

评论


答:

7赞 Lavvo 7/10/2015 #1

我认为你应该使用:

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

取而代之的是:

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

评论

0赞 Fdo 7/11/2015
不,两者都有,但也只是尝试注释单元格缩放并仅留下 imageView 缩放但没有奏效。在情节提要中,“集合视图”和“集合可重用单元格”都具有和 ...对可能在那里起作用的不同东西有什么建议吗?Aspect FillClip Subviews
0赞 Sravan 9/6/2022
就我而言,当我设置了宽度和高度限制时,它起作用了。
29赞 Muhammad Sarim 8/31/2016 #2

很简单,只需这样做:

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

评论

1赞 Adam G 3/27/2018
应该是 imageView.layer.masksToBounds = YES;
0赞 Muhammad Sarim 4/12/2018
你还看到了什么,我写了?
4赞 ruelluna 5/2/2018
斯威夫特 4 =imageView.layer.maskToBounds = true
0赞 Sravan 9/6/2022
就我而言,当我设置了宽度和高度限制时,它起作用了。
1赞 Reza.Ab 4/24/2018 #3

[您的图像视图 setContentMode:UIViewContentModeScaleAspectFill]; yourImageView.layer.masksToBounds = 是;

-1赞 Reşit Şahin 11/17/2023 #4

imageView.contentMode = UIView.ContentMode.scaleAspectFill imageView.layer.masksToBounds = 真