在 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的主要内容,如果未能解决你的问题,请参考以下文章