为啥在滚动过程中单元格的孩子的高度会发生变化?

Posted

技术标签:

【中文标题】为啥在滚动过程中单元格的孩子的高度会发生变化?【英文标题】:Why cell's childs' height changes during scrolling?为什么在滚动过程中单元格的孩子的高度会发生变化? 【发布时间】:2018-02-26 11:33:59 【问题描述】:

使用UIController(以新信息重用单元格 - 与另一个模型类实例)和自定义UICollectionViewCell 在滚动期间(用手指从上到下)单元格标签的高度从 54.0 到 84.5(见输出)

为什么会这样?

测试代码

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyItemCollectionViewCell", for: indexPath) as! MyItemCollectionViewCell

    print("uilabel height \(cell.mylabel.frame.height)")

    return cell

输出

uilabel height 54.0
uilabel height 54.0
uilabel height 54.0
uilabel height 54.0
uilabel height 54.0
uilabel height 54.0
uilabel height 54.0
uilabel height 84.5
uilabel height 84.5
uilabel height 84.5
uilabel height 84.5

单元格

class MyItemCollectionViewCell: UICollectionViewCell 

    @IBOutlet var mylabel: UILabel!

    func setItem(_ item: MyItem) 
        mylabel.text = item.name
    

【问题讨论】:

每个单元格的 itemSize 可能不同 @Sh_Khan 我没有改变大小,我在故事板中只有一个单元格及其子级的模板 你的意思是它的变化是明显的还是只是在“打印”中?另外,您在哪里调用“setItem”,它在“cellForItemAtIndexPath”中吗?我在您的代码中没有看到任何内容。 另外一点,“cellForItemAtIndexPath”可能无法显示正确的高度,所以不要依赖“打印”来调试单元格高度。 @aunnnn 见cellForItemAt indexPath 【参考方案1】:

我认为可能是重绘屏幕时的问题,集合视图没有重新加载。看起来和这篇文章一样CollectionView Cell changing size after scrolling - AutoLayout。

【讨论】:

我不知道outerCell是什么-***.com/a/41887585/4548520,UICollectionViewCell不存在这些方法 它只是上面代码中单元格的标识符。

以上是关于为啥在滚动过程中单元格的孩子的高度会发生变化?的主要内容,如果未能解决你的问题,请参考以下文章

为啥滚动后我的单元格中的图标会发生变化? [复制]

为啥集合视图中的动态集合单元格不显示为给定大小并且在 swift 3 中滚动后会发生变化

滚动时 UITableViewCell 内容会发生变化,因为在其中一个单元格中运行计时器

UITableview 单元格高度在 iOS 14.0 中的滚动表视图上发生变化

自定尺寸单元格高度变化导致跳跃动画

表格视图高度之外的行的单元格内容发生变化(要查看此单元格,我们向下滚动)?