在 CellForRowAt 中包含用于自定义 UIView 的 nib 文件,在滚动时会产生 jerk

Posted

技术标签:

【中文标题】在 CellForRowAt 中包含用于自定义 UIView 的 nib 文件,在滚动时会产生 jerk【英文标题】:Including nib file for custom UIView in CellForRowAt producing jerk while scrolling 【发布时间】:2017-09-27 02:42:47 【问题描述】:

我有一个 UITableView,我在 tableView 的“CellForRowAt”委托函数中包含了我的自定义 UIView 的 nib 文件,该函数在滚动时会产生抖动。例如:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
       let cell = tableView.dequeueReusableCell(withIdentifier: 
       "cell", for: indexPath) as! CustomCell
       let customView: CustomView = Bundle.main.loadNibNamed("CustomView", owner: 
       self, options: nil)![0] as! customView
       cell.customViewPlacement.addSubview(customView)
       return cell

如何解决滚动问题?我的代码有什么问题? 谢谢

【问题讨论】:

【参考方案1】:
cell.customViewPlacement.addSubview(customView)

这不是您在cellForRow 中创建单元格和重用的方式,您基本上是在创建新视图并在每次单元格滚动时添加它(不断重复),从而使其抽搐,您必须使用创建单元格笔尖该视图,并在viewDidLoad 中注册您的 nib 文件,例如:

tableView.register(UINib(nibName: "CustomCell", bundle: nil), forCellReuseIdentifier: "CustomCell")

cellForRow 中像平常一样出队:

let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell

如果您有许多不同类型的单元格,请创建多个单元格类,而不是创建新视图并添加到当前单元格

【讨论】:

不,你误会了。我没有为 tableViewCell 创建笔尖。 customView 是我放置在单元格中的视图。让 customView: CustomView = Bundle.main.loadNibNamed("CustomView", owner: self, options: nil)![0] as! customView //这是我的customView............ cell.customViewPlacement.addSubview(customView) // 这是我放置customView的地方。 那是你错的地方,你应该用你所说的视图创建包含单元格的笔尖,而不是将它们分开,如果你不能这样做,无论出于何种原因,将视图添加到单元格在CustomCell 类的awakeFromNib 中,而不是来自cellForRow

以上是关于在 CellForRowAt 中包含用于自定义 UIView 的 nib 文件,在滚动时会产生 jerk的主要内容,如果未能解决你的问题,请参考以下文章

在 Wordpress the_content() 中包含高级自定义字段 (ACF)

在代码片段中包含类型转换

在 Simulink 的自定义代码部分中包含库

如何在我的自定义主题中包含自定义 js 文件?

在 Simulink 的自定义代码部分中包含 c 库

如何在 Angular 2 中包含打字稿自定义类型定义?