gpt4 book ai didi

ios - UITableView visibleCells 在 contentOffset 之后返回错误的单元格

转载 作者:行者123 更新时间:2023-11-28 21:43:02 25 4
gpt4 key购买 nike

我有一个 tableView。我使用 CADisplayLink 调用一些滚动 tableView 的代码。我这样做是因为我想自定义滚动所需的时间,而不是使用 UITableView 方法。

我想要一些缓动,所以我在 displayLink 滚动时调用了 invalidate,然后执行另一个 contentOffset 以使其看起来不错。我向上滚动 25 点。然后我调用 NSArray *array = self.tableView.visibleCells 但我在无效后进行最终滚动之前获取了单元格。例如,我的数组包含数字 1-8,我从底部开始,所以 6、7、8 在开始时出现在 tableView 中。我按下一个 UIButton,它滚动了 2.1 秒。它停止,调用另一个方法并以另一种方式向后滚动 25 个点。我的 tableView 显示

3 4 5

但我的 NSLog 语句显示

2 3 4

问题是我无法在滚动后获得正确的索引或单元格。

-(void)scrollRoller{

self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(automaticScroll:)];

[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

}

-(void)automaticScroll:(CADisplayLink*)displayLink
{
[self.tableView setContentOffset:CGPointMake(self.tableView.contentOffset.x, self.tableView.contentOffset.y - 5) animated:NO];

double test = self.displayLink.duration *self.displayLink.frameInterval;

self.counter = self.counter + test;

if (self.counter >= 2.1){

[self.displayLink invalidate];


[self.tableView setContentOffset:CGPointMake(self.tableView.contentOffset.x, self.tableView.contentOffset.y + 25) animated:YES];

NSArray* cells = self.tableView.visibleCells;

NSLog(@"cells in first method %@", cells);
self.counter = 0.0;

}

最佳答案

UICollectionView 上对类似问题进行了一些测试后,我想我明白了发生了什么。

visibleCells 在相应的 tableView:cellForRowAtIndexPath: 委托(delegate)方法被调用后得到更新。当您直接将 contentOffset 应用于 UIScrollView(或其子类)时,可能会调用 setNeedsDisplay 来触发 的更新code>UITableViewUICollectionView 在下一个屏幕更新中。

因此 cellForRowAtIndexPath: 不能保证立即被调用。因此,您对 visibleCells 的调用在屏幕更新之前执行,并且不会返回您期望的单元格。

要解决您的问题,您应该调用 indexPathForRowAtPoint:indexPathsForRowsInRect:

关于ios - UITableView visibleCells 在 contentOffset 之后返回错误的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31336321/

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