为啥 UIImageView 没有填满整个 CollectionViewCell 即使我有所有的约束

Posted

技术标签:

【中文标题】为啥 UIImageView 没有填满整个 CollectionViewCell 即使我有所有的约束【英文标题】:Why the UIImageView does not fill the entire CollectionViewCell even I have all the constraints为什么 UIImageView 没有填满整个 CollectionViewCell 即使我有所有的约束 【发布时间】:2016-06-02 15:46:15 【问题描述】:

我有一个水平的UICollectionView,每个单元格都有一个UIImageView。当我将 UIImageView 定位在单元格内时:

故事板看起来像这样(注意UIImageView 占据了UICollectionViewCell 的整个空间,标识符为postInnerCell)

我想我已经正确地使用 autoLayout 设置了约束,UIImageView 的每一侧都固定在UICollectionViewCell 的边缘。 像这样

但是,当我运行模拟器时,它看起来像这样:

图片没有填满collectionViewCell的整个空间(背景为灰色)。 UIImageView的内容模式在界面生成器中设置为方面填充。

这是我的视图层次结构:

**注意整个UICollectionView是tableView的一个单元格(基本上,我试图完成的是tableView的每一行都是一个水平滑块)。我不确定这是问题所在。任何人都知道为什么会出现这样的问题。 **

【问题讨论】:

也许你需要检查你的视图内容模式,必须是方面填充 @ReinierMelian,你的意思是imageView的内容模式,我已经设置好了,正如我的问题中提到的 你能添加一些代码来看看发生了什么吗?对不起我之前的评论 我认为你应该在帖子内部单元格(集合视图的单元格)上勾选剪辑子视图选项 【参考方案1】:

事实证明,在collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) 方法中返回单元格之前,我需要通过调用cell.layoutIfNeeded() 重新布局子视图。感谢这里UICollectionViewCell content wrong size on first load的回答的贡献@

【讨论】:

【参考方案2】:

将图像视图的Content hugging priority设置为Low (250)

【讨论】:

【参考方案3】:

IIRC,单元格的内容视图将在不触发 AutoLayout 的情况下调整大小,因此您必须手动触发布局传递(例如 .needsLayout = true 或将内容视图中的约束添加到单元格

【讨论】:

从内容视图到单元格添加约束是什么意思,你的意思是contentView到collectionview之间的约束? 您拥有的视图层次结构是:集合视图 > 单元格 > 内容视图 > 图像视图。我说的是从内容视图到单元格的约束。试试视图调试器看看我在说什么。

以上是关于为啥 UIImageView 没有填满整个 CollectionViewCell 即使我有所有的约束的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 内的 UIImageView 具有默认填充 - 如何删除?

为啥当我在平移单元格时更改 UIImageView 的图像时,整个视图会重置一秒钟?

为啥 Youtube 视频没有填满 UiWebView?

UIImageView三种方式 和 位置分布

Silverlight 网格没有填满整个空间

背景没有填满整个视图 SpriteKit