我试图绕过第一个和最后一个tableView单元的角落,但是我遇到了问题。滚动时,我的最后一个可重用的tableView单元返回了错误的indexPath.row。所以它从0到9,因为我有一个包含10个项目的数组,然后是6到9,然后是3到4。根据我的研究,我得出结论,这是因为单元被重用而发生的,但这仅在滚动时发生。点击单元格时,它会按预期返回正确的indexPath.row。
我尝试了一些解决方案,例如:
这些工作都没有,尤其是最后一项。当显示最后一个单元格时,我在断点上检查了indexPath.row并返回“ 3”,而不是我期望的9(因为我有10个单元格)。
返回单元格数:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard let resultsCount = results?.count else { return 0 }
return resultsCount
}
设置单元格
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let customTableViewCell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) as! CustomTableViewCell
// Setup stuff
...
if indexPath.row == 0 { // if first cell
// Do something
...
} else if indexPath.row == results!.count - 1 { // if last cell
// Do something
...
} else {
// Do something
...
}
return searchResultsCell
}
也尝试过此操作,而不是在cellForRowAt中进行操作:
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
在滚动时是否还有另一种获取最后一个单元格的实际indexPath.row的方法,这样我就可以将其倒圆角?
答案 0 :(得分:2)
问题是,正如您所说,单元已被重用。当单元格的行为0时,您正在对单元格的上角进行圆角处理,但是当单元格的行为 not 零时,您忘记了对单元格的角进行 unround 。对于最后一行类似。
答案 1 :(得分:0)
我宁愿对顶部,中央和底部单元格使用3个不同的单元格重用标识符。现在,每个单元格只会用于其中一种情况。
答案 2 :(得分:-1)
您可以使用以下代码来改进您的解决方案,
from io import StringIO
string = """Hello
world!"""
X = StringIO(string)
print(X.readlines()) # Example file operation
# ['Hello\n', 'world!']
希望这对您有所帮助。
答案 3 :(得分:-2)
我重做了整个视图,现在它按预期工作了,但是不幸的是,我仍然不知道是什么引起了问题。模拟器中的错误可能不太可能发生,因为它可以在真实设备上正常运行:/