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 的一部分透明以便在下面的图层中显示视图

iPhone sdk - UIImageView 重叠问题

UIImageView 帧长宽比错误?

如何将 UIImageVIew 实时移动到 UILabel 的位置?

iOS7 Autolayout 和 UIImageview 超大

将 UIImageView 作为参数发送到 WCF 服务