gpt4 book ai didi

iphone - 如何阻止 UITable 在减速时覆盖我设置的内容偏移量?

转载 作者:行者123 更新时间:2023-11-29 11:19:45 25 4
gpt4 key购买 nike

我有一张 table ,我正在为其做一些特殊的加载。用户开始滚动到底部。当用户滚动到顶部附近时,我通过 ScrollView 委托(delegate)方法检测到这一点,我快速加载一些额外的内容,并填充列表顶部的更多内容。我希望它看起来是无缝的,就像一个向上的“无限滚动”。为此,我必须设置内容偏移量,这样用户就不会看到表格向上“跳跃”。当我慢慢滚动时,效果很好。当我快速滚动时,表格正在减速,我设置的内容偏移量将被忽略。这是我正在使用的代码:

CGFloat oldHeight = self.tableView.contentSize.height;
CGFloat oldOffset = self.tableView.contentOffset.y;
self.tableContentsArray = newTableContentsArray;
[self.tableView reloadData];
CGFloat newHeight = self.tableView.contentSize.height;
CGFloat newOffset = oldOffset + (newHeight - oldHeight);
self.tableView.contentOffset = CGPointMake(0, newOffset);

因此,如果我使用 100 像素高的表格快速向上滚动并在减速时触及顶部,我将加载更多数据,获得新的表格高度,例如 250 像素。我将偏移量设置为 150。但是,由于它仍在减速,Apple 代码将偏移量设置为 150 0.1 秒左右,然后转到下一个计算的减速偏移量,并将偏移量设置为 0,这使得它让用户看起来好像他们刚刚跳过了 150 像素的内容,现在位于列表的新顶部。

现在我很乐意将加速度从列表中保留下来,这样它会持续上升一段时间,然后减速,并最终达到大约 120 像素的偏移量,就像您期望的那样。问题是,如何?

如果我使用 [self.tableView setContentOffset: CGPointMake(0, newOffset) animated: NO]; 它会阻止内容偏移量被忽略,但会停止列表。

最佳答案

几个月前,我们在工作中遇到了这样一个有趣的情况。我们想使用 UITableViewController,因为它具有缓存、加载和动画功能,但我们希望它水平滚动(在您的情况下它将向上滚动)。解决方案?旋转表格,然后向另一个方向旋转单元格。

在您的情况下,代码将如下所示:

#define degreesToRadian(x) (M_PI * (x)/180.0) 在 header 中

- (void) viewDidLoad {
[super viewDidLoad];
self.table.transform = CGAffineTransformMakeRotation(degreesToRadian(-180));
...
}

然后旋转单元格,使其以正确的方向显示给用户

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
cell.transform = CGAffineTransformMakeRotation(degreesToRadian(180));
}

现在您可以像任何普通表格一样后置单元格,它们将被添加到顶部而不是底部。

关于iphone - 如何阻止 UITable 在减速时覆盖我设置的内容偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7878608/

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