使用超过 1 个 Prototype Cell 时 UITableView 的奇怪行为
UITableView strange behaviour when using more than 1 Prototype Cell
所以我有一个 UITableView,我计划在其中使用 2 个原型单元格。我们称它们为单元格 A 和单元格 B。单元格 A 有自己的布局,单元格 B 有自己的布局。
事情是这样的,在只有 1 个原型单元格的典型 UITableView 实现中,在设置所有单元格及其属性后,cellForRowAtIndexPath 负责根据 numberOfRowsInSection 中的 (x) 个项目填充所有行。
这是我遇到问题的地方。我已经在我的 UITableView 中实现了我的原型单元格,当我 运行 它时,我注意到 cellForRowAtIndexPath 只被调用了两次,即使我在 (x) 个项目中有一个值大于 2。Doesn不管我将它设置成什么,它只会被调用两次。我已经有了必要的 if 语句来根据单元格索引等选择单元格原型……所以这不是问题。问题是 cellForRowAtIndexPath 只是被调用了两次,而不是遍历所有项目。
为什么会这样,我该如何解决?
这是我的数据源方法代码:
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()
}
您的单元格高度是多少? cellForRowAtIndexPath 只有在 table 认为它需要显示单元格时才会被调用。因此整个重用机制。因此,如果您有 8 个单元格,并且它认为 2 个单元格填满了屏幕,那么在您滚动 up/down.
之前,它不会再要求任何内容
您要为 heightForRowAtIndexPath 返回什么。
所以我有一个 UITableView,我计划在其中使用 2 个原型单元格。我们称它们为单元格 A 和单元格 B。单元格 A 有自己的布局,单元格 B 有自己的布局。
事情是这样的,在只有 1 个原型单元格的典型 UITableView 实现中,在设置所有单元格及其属性后,cellForRowAtIndexPath 负责根据 numberOfRowsInSection 中的 (x) 个项目填充所有行。
这是我遇到问题的地方。我已经在我的 UITableView 中实现了我的原型单元格,当我 运行 它时,我注意到 cellForRowAtIndexPath 只被调用了两次,即使我在 (x) 个项目中有一个值大于 2。Doesn不管我将它设置成什么,它只会被调用两次。我已经有了必要的 if 语句来根据单元格索引等选择单元格原型……所以这不是问题。问题是 cellForRowAtIndexPath 只是被调用了两次,而不是遍历所有项目。
为什么会这样,我该如何解决?
这是我的数据源方法代码:
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()
}
您的单元格高度是多少? cellForRowAtIndexPath 只有在 table 认为它需要显示单元格时才会被调用。因此整个重用机制。因此,如果您有 8 个单元格,并且它认为 2 个单元格填满了屏幕,那么在您滚动 up/down.
之前,它不会再要求任何内容您要为 heightForRowAtIndexPath 返回什么。