gpt4 book ai didi

ios - reloadRowsAtIndexPaths 时保持偏移量

转载 作者:可可西里 更新时间:2023-11-01 03:23:52 29 4
gpt4 key购买 nike

我正在尝试重新加载单个 tableViewCell,但每次我这样做时它都会滚动到顶部...我没有添加或删除单元格,我只是想更改所选单元格的颜色。

这就是我在 cellForRowAtIndexPath 中所做的:

SMPChoiceViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ChoiceCell" forIndexPath:indexPath];
SMPChoice *choice = self.choices[indexPath.row - 1];
cell.choiceTextLabel.text = choice.text;

if ([self.selectedChoices indexOfObject:choice] != NSNotFound) {
cell.choiceTextLabel.textColor = [UIColor purpleColor];
} else {
cell.choiceTextLabel.textColor = [UIColor blackColor];
}

这就是我在 didSelectRowAtIndexPath 中所做的

if ([self.selectedChoices indexOfObject:choice] != NSNotFound) {
[self.selectedChoices removeObject:choice];
} else {
[self.selectedChoices addObject:choice];
}

CGPoint offSet = [tableView contentOffset];

[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView setContentOffset:offSet animated:NO];

但它只是跳跃,有什么建议吗?

附言我关注了这个话题,但它没有解决我的问题 Calling reloadRowsAtIndexPaths removes tableView contentOffset

最佳答案

因为某些神秘的原因, TableView 在使用估计的行高重新加载一些单元格后确定新的偏移量,您希望确保 tableView:estimatedHeightForRowAtIndexPath 为已经呈现的单元格返回正确的数据.为此,您可以将看到的行高缓存在字典中,然后使用此正确数据(或您对尚未加载的单元格的估计。)

fileprivate var heightForIndexPath = [NSIndexPath: CGFloat]()
fileprivate let averageRowHeight: CGFloat = 300 //your best estimate

//UITableViewDelegate

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
heightForIndexPath[indexPath] = cell.frame.height
}

override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return heightForIndexPath[indexPath] ?? averageRowHeight
}

(非常感谢 eyuelt 提供了估计行高用于确定新偏移量的见解。)

关于ios - reloadRowsAtIndexPaths 时保持偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27102887/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com