为什么在Xcode 11上,UICollectionViewCell会在您滚动时立即更改大小(我已经在sizeForItem AtIndexPath:中设置了大小)?

Rez*_*.Ab 9 xcode ios uicollectionview uicollectionviewcell swift

在此处输入图片说明

我在tableview单元格内有collectionview,并且将nib用作我的collectionview单元格(在其中我对imageview和label使用autolayout,它处于Freeform模式下)。我在tableviewcell类中设置单元格大小,该类正在通过此方法在其中处理collectionview的委托:

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 200, height :150)        
    }
Run Code Online (Sandbox Code Playgroud)

它始终有效,但在Xcode 11之后无效。

tet*_*jen 16

您在 Xcode 11中将collectionview Estimate size设置为None。这样做的原因是 a 中的单元格UICollectionView现在可以使用画布中的 Auto Layout 约束视图自行调整大小。要选择现有集合视图的行为,请在大小检查器中为集合视图的估计大小启用“自动”,并为单元格大小启用“自动”。

如果在 iOS 13 之前部署,您可以通过调用激活自调整集合视图单元格 performBatchUpdates(_:completion:) during viewDidLoad()

参考:https : //developer.apple.com/documentation/xcode_release_notes/xcode_11_release_notes


Tua*_*yen 14

我也有同样的问题。而我的解决办法是改变Estimate sizeNone在Xcode 11。

在此处输入图片说明

  • 对于那些试图在代码中不设置任何内容的人来说,你是一个救星:);我将其设置为 .zero“layout.estimatedItemSize = .zero” (4认同)

小智 7

这个问题出现在 Xcode 11 中。转到属性检查器并将估计大小更改为无。会解决每一件事。


Car*_*ano 7

正如 Anh Tuan 在此处的另一个答案中所说,您只需要在 Storyboard 的 Collection View 的 Size Inspector中将Estimate Size更改为none

但是,如果您想以编程方式执行此操作,可以尝试以下代码:

    let layout = myCollectionViewReferenceHere.collectionViewLayout as! UICollectionViewFlowLayout
    layout.estimatedItemSize = .zero
Run Code Online (Sandbox Code Playgroud)