首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awakeFromNib()在滚动启动时在UICollectionViewCell子类中调用两次

awakeFromNib()在滚动启动时在UICollectionViewCell子类中调用两次
EN

Stack Overflow用户
提问于 2017-03-24 09:53:27
回答 1查看 1.2K关注 0票数 1

我在xib中有定制的UICollectionViewCell

当加载ViewController时,单元格子类中的awakeFromNib()被调用6次(屏幕最初放置了6个单元格,好),但当我开始滚动时,awakeFromNib()会被调用6倍以上,从而导致延迟。但是在这之后,“重新加载”滚动开始顺利地工作。这只是在滚动开始的第一次发生。显然,使用的是dequeueReusableCell

使用UITableView来代替集合,情况类似。感觉就像接下来的6个单元再次从xib加载(仅在100+单元的集合中),忽略了重用。

有什么问题吗?

为清楚起见:

UIColectionView具有垂直滚动方向,两个单元格在线上。当ViewController加载时,我看到屏幕上有6个单元格,控制台中有6个awakeFromNib调用。

我开始向下滚动到7-8个单元,在它们出现在屏幕上之前,我看到了滞后和两个awakeFromNib方法调用。

类似地,对于以下两对单元格。

在此滚动开始后,工作良好,直到单元格99-100+,而awakeFromNib从未被调用。

补充道: OK,下面是我发现的:

我在一个subView中有一个collectionView (标题类似于UITableView),因此,collectionViewLayout设置了sectionInsets top = header的高度。如果我删除标题,并使顶部嵌入,例如:-180 (大约排除NavigationBar的高度,所以屏幕最初适合12个单元格,滚动滞后消失。

Ie,系统需要从xib加载所有在屏幕上一次可见的单元格,并在将来重用它们。(但为什么不一次加载xib并立即对所有其他初始单元进行重用呢?)

现在的问题是-如何解决它?

Added.2

工作解决方案-在viewDidAppear方法ViewController中添加标头,但是.嗯..。不太好。

EN

回答 1

Stack Overflow用户

发布于 2017-03-24 11:10:42

这实际上是一个已知的副作用(或有目的的设计?)UICollectionView & UITableView。这里有一个相关的问题(谈论NSTableView,但概念/问题是相同的):

awakeFromNib method called multiple times

您的集合视图最初显示六个单元格,但听起来iOS需要再分配六个单元格,以便向左和向右滚动。因此,内存中至少有12个(可重用)单元。

如果您在awakeFromNib中做了大量的工作(这是导致延迟的原因),您可能想要确定如何优化事情。

您还可以在这个相关问题中找到其他一些有用的提示:

UITableViewCell - Best place to set up the cell

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42996256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档