UIImageView 在下一个 ViewController 打开时与 UILabel 重叠
Posted
技术标签:
【中文标题】UIImageView 在下一个 ViewController 打开时与 UILabel 重叠【英文标题】:UIImageView overlaps UILabel on next ViewController Open 【发布时间】:2016-11-26 17:39:20 【问题描述】:我有一个父 ViewController 打开第二个。 第二个 ViewController 包含图像中的网格视图。
当我返回并再次进入同一屏幕时,我发现布局更改为这个
在第二张图片中,UIImage 与标签重叠。
这是我的 InterfaceBuilder 设置
我使用以下代码更改大小和 EdgeInsets
func collectionView(_ collectionView: UICollectionView, layout: UICollectionViewLayout, sizeForItemAtIndexPath: IndexPath) -> CGSize
let width = collectionView.frame.size.width/2 - 8*2
if let cell = collectionView.cellForItem(at: sizeForItemAtIndexPath)
return CGSize(width: width, height: cell.frame.height)
else
return CGSize(width: width, height: 104)
func collectionView(_ collectionView: UICollectionView, layout: UICollectionViewLayout, insetForSectionAtIndex : NSInteger) -> UIEdgeInsets
return UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8);
为什么第一次只有布局是正确的,之后布局改变了,有什么线索吗?
编辑1:
这是 3D 调试的屏幕截图
【问题讨论】:
sizeForItemAtIndexPath 中 cell.frame.height 的输出是什么?那条线每次都打吗? 它永远不会被击中!,始终将其设置为 104 的高度 您是否尝试过 3d 调试以查看现场情况? @NickCatib 我添加了 3d 调试屏幕截图。 你应该旋转一下,这样我们就可以看到后面的内容:) 这是 3d 调试的最佳部分 【参考方案1】:尝试将 UILabel 中的 aspect ratio
约束赋予图像。打然后跑。
但在此之前,请确保您不想要静态高度 imageView
。如果您希望imageView
的高度不增加或减少设备,那么只需将静态height constraint
提供给imageView
,而不是宽高比。你的问题会得到解决的。
【讨论】:
【参考方案2】:尝试在 xib 文件中的 UIImageView 上将 clipToBounds
设置为 true
【讨论】:
以上是关于UIImageView 在下一个 ViewController 打开时与 UILabel 重叠的主要内容,如果未能解决你的问题,请参考以下文章
如何使 UIImageView 的一部分透明以便在下面的图层中显示视图
如何将 UIImageVIew 实时移动到 UILabel 的位置?