Ios Swift对单元格使用estimatedItemSize会在滚动期间打断单元格宽度

Ios Swift对单元格使用estimatedItemSize会在滚动期间打断单元格宽度,ios,swift,layout,uicollectionview,Ios,Swift,Layout,Uicollectionview,ios版本11/12 尝试为UIViewController创建动态单元格高度(单元格包含具有固定高度的图像和可以是多行的标签,因为标签视图单元格应该能够动态更改高度)。我正在使用故事板构建基本UI,其中包含一些使单元格最小宽度为300的约束 在UIViewController中垂直滚动时出现奇怪的UI行为。某些单元格(最初不在UI中)的大小调整为故事板约束中定义的大小,并忽略estimatedItemSize 导入UIKit 类StartController:UIViewController、

ios版本11/12

尝试为
UIViewController
创建动态单元格高度(单元格包含具有固定高度的图像和可以是多行的标签,因为标签视图单元格应该能够动态更改高度)。我正在使用故事板构建基本UI,其中包含一些使单元格最小宽度为300的约束

在UIViewController中垂直滚动时出现奇怪的UI行为。某些单元格(最初不在UI中)的大小调整为故事板约束中定义的大小,并忽略
estimatedItemSize

导入UIKit
类StartController:UIViewController、UICollectionViewDelegate、UICollectionViewDataSource{
let offers=SearchCategoryOffer.mockOffers
@ibvar collectionView:UICollectionView!
重写func viewDidLoad(){
super.viewDidLoad()
navigationController?.view.backgroundColor=UIColor.white
让titleImageView=NavigationImageView()
titleImageView.image=UIImage(名为:“徽标”)
navigationItem.titleView=标题图像视图
设w=self.collectionView.frame.width-30
collectionView.delegate=self
collectionView.dataSource=self
collectionView.TranslatesAutoResizezingMaskintoConstraints=false
如果let layout=self.collectionView.collectionViewLayout为?UICollectionViewFlowLayout{
layout.sectionInsetReference=.fromLayoutMargins
layout.sectionInset=UIEdgeInsetsMake(20,5,20,5)
layout.minimumLineSpacing=26
layout.minimumInteritemSpacing=0
layout.estimatedItemSize=CGSize(宽:w,高:300)//单元格大小
}
}
func numberOfSections(在collectionView:UICollectionView中)->Int{
返回1
}
func collectionView(collectionView:UICollectionView,numberOfItemsInSection:Int)->Int{
返回报价。计数
}
func collectionView(collectionView:UICollectionView,cellForItemAt indexPath:indexPath)->UICollectionViewCell{
让cell:OfferCell=collectionView.dequeueReusableCell(withReuseIdentifier:“cell”,for:indexPath)作为!OfferCell
cell.listTitle?.text=提供[indexPath.row].name
返回单元
}
func collectionView(collectionView:UICollectionView,didSelectItemAt indexPath:indexPath){
让u3;:OfferCell=collectionView.cellForItem(at:indexPath)作为!OfferCell
}
func collectionView(collectionView:UICollectionView,DidDecelectItemat indexPath:indexPath){
让u3;:OfferCell=collectionView.cellForItem(at:indexPath)作为!OfferCell
}
覆盖功能准备(对于segue:UIStoryboardSegue,发送方:有吗?){
//呜呜呜呜
}
}
类NavigationImageView:UIImageView{
重写func sizeThatFits(usize:CGSize)->CGSize{
返回CGSize(宽:133,高:35)
}
}

我在您的代码中没有看到任何关于estimatedItemSize的内容。我不使用故事板,所以可能你有它,但这意味着他们有编码。也许我书中关于TableView的一页可能会有所帮助:通常,我会在显示单元格时获取其实际大小,并将其存储在字典中,其中UUIID或服务器ID作为键(而不是索引路径)。然后我重用这些值作为估计值。这给了我更好的结果,并消除了滚动和重新加载表视图时出现的问题。也许这对集合视图也有帮助。@Kubee
layout.estimatedItemSize=CGSize(宽:w,高:300)//单元格大小
我在代码中没有看到任何关于estimatedItemSize的内容。我不使用故事板,所以可能你有它,但这意味着他们有编码。也许我书中关于TableView的一页可能会有所帮助:通常,我会在显示单元格时获取其实际大小,并将其存储在字典中,其中UUIID或服务器ID作为键(而不是索引路径)。然后我重用这些值作为估计值。这给了我更好的结果,并消除了滚动和重新加载表视图时出现的问题。也许这对集合视图也有帮助。@Kubee
layout.estimatedItemSize=CGSize(宽度:w,高度:300)//单元格大小