UITableView 使用超过 1 个原型单元时的奇怪行为
Posted
技术标签:
【中文标题】UITableView 使用超过 1 个原型单元时的奇怪行为【英文标题】:UITableView strange behaviour when using more than 1 Prototype Cell 【发布时间】:2015-02-02 23:19:40 【问题描述】:所以我有一个 UITableView,我计划在其中使用 2 个原型单元格。我们称它们为 Cell A 和 Cell B。Cell A 有自己的布局,Cell B 有自己的布局。
事情是这样的,在一个只有 1 个原型单元格的典型 UITableView 实现中,在设置了所有单元格及其属性之后,cellForRowAtIndexPath 负责根据 numberOfRowsInSection 中的 (x) 个项目填充所有行。
这是我遇到问题的地方。我已经在我的 UITableView 中实现了我的原型单元格,当我运行它时,我注意到 cellForRowAtIndexPath 只被调用了两次,即使我的 (x) 个项目数中的值大于 2。没关系我将它设置为,它只被调用两次。我已经有了必要的 if 语句来根据单元格索引等选择单元格原型……所以这不是问题。问题是 cellForRowAtIndexPath 只是被调用了两次,而不是循环遍历所有项目。
为什么会这样,我该如何解决?
这是我的 DataSource 方法的代码:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 8
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
Scripts.log("Data Count = \(indexPath.row)")
if indexPath.row == 0
var cell: ContactDetailImageCell = tableView.dequeueReusableCellWithIdentifier(NAME_OF_CUSTOM_IMAGE_CELL) as ContactDetailImageCell
cell.cardPhoto.image = aContact.profilePicture
cell.fullName.text = aContact.getDisplayName()
cell.workplace.text = aContact.workplace
return cell
else
var cell: ContactDetailPhoneNumCell = tableView.dequeueReusableCellWithIdentifier(NAME_OF_CUSTOM_PHONE_CELL) as ContactDetailPhoneNumCell
return cell
return UITableViewCell()
【问题讨论】:
您需要显示数据源方法的代码。 【参考方案1】:你的单元格高度是多少?只有当表格认为它需要显示单元格时,才会调用 cellForRowAtIndexPath。因此,整个重用机制。因此,如果您有 8 个单元格并且它认为 2 个单元格填满了屏幕,它不会再要求您向上/向下滚动。
你为 heightForRowAtIndexPath 返回什么。
【讨论】:
我的天啊,我刚试过这个并滚动,你瞧,其他单元格出现了。我的“单元格 A”在情节提要中的高度为 375,因为我想在那里显示图像。我的“单元格 B”在情节提要中的高度为“60”(但现在我对其进行了测试,我看到它在执行时以某种方式从单元格 A 继承了 375 的高度),这是可以基于 # 进行迭代的单元格找到的记录。那么我应该在代码中再次手动设置单元格 B 的高度还是如何解决这个问题? 在 ios7 中,你必须通过实现 heightForRowAtIndexPath 来告诉它每一行的高度。在 iOS8 中,您可以使用自动调整单元格大小的机制来为您完成。你能接受这个答案吗,因为我回答了原来的问题。 是的,我接受这个答案。我刚刚完成了使用相同 if row == 0 else 实现 heightForRowAtIndexPath ....我在 cellForRowAtIndexPath 中使用的逻辑,现在它可以正常工作,就像我想要的那样。非常感谢您的帮助!!!以上是关于UITableView 使用超过 1 个原型单元时的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章
UIImage 没有出现在 UITableView (Swift) 的原型单元格中