UIImageView 在下一个 ViewController 打开时与 UILabel 重叠

UIImageView overlaps UILabel on next ViewController Open

我有一个父 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 调试的屏幕截图

尝试在 xib 文件中将 UIImageView 的 clipToBounds 设置为 true

尝试从 UILabel 到图像提供 aspect ratio 约束。点击然后 运行。 但在此之前,请确保您不需要静态高度 imageView。如果你不希望 imageView 的高度在设备方面不增加或减少,那么只需给 imageView 一个静态的 height constraint 而不是纵横比。您的问题将得到解决。