gpt4 book ai didi

ios - UITableView beginUpdates/endUpdates 滚动时使滚动跳转

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

我的UITableView需要显示来自服务器的一些图像。 UITableViewCell 由单个 UIImageView 和用于 UIImageView 高度的 NSLayoutConstraint 组成。

在 View Controller 的cellForRowAtIndexPath中,它从服务器获取图像并将图像大小调整为适合屏幕宽度。一件重要的事情是图像需要保持纵横比,因此我编写了一段代码来获取保持纵横比的图像高度。高度应用于 ImageView 高度的布局约束。

除非我调用 [tableView beginUpdates][tableView endUpdates] 方法,否则单元格不会调整大小,因此我在加载单元格的每个图像后调用这些方法。问题是当用户在获取图像时滚动 TableView 并调用 beginUpdatesendUpdates 方法时,滚动会跳转到某个点。 (我不确定表格 View 跳转到哪里)

这就是我试图防止跳跃的方法:

- (void)resizeCellHeight {
[UIView performWithoutAnimation:^{
self->currentScrollY = self.tableView.contentOffset.y;

[self.tableView beginUpdates];
[self.tableView endUpdates];

self->currentScrollY = -1;
}];
}


- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if(currentScrollY != -1) {
[scrollView setContentOffset:CGPointMake(scrollView.contentOffset.x, currentScrollY) animated:NO];
}
}

有时它会起作用,但不是 100%。这段代码有时甚至会阻止减速并不断跳跃。

有什么办法可以防止 ScrollView 跳跃吗?或者更好的方法来计算细胞?

最佳答案

在 cellForRow 中获取数据是不行的。这很耗时并且阻塞了主线程。

所有与服务器相关的项目都必须在另一个线程上完成,完成后重新加载 tableView(或其中的特定项目)。

如果您知道图像大小,则可以使用 imageView 中图像的大小创建单元格,然后在从服务器获取该行的数据后使用 [tableView reloadAtIndexPaths:] 刷新单元格。

要保持宽高比,只需将 imageView 的 contentMode 设置为 .aspectFit。

要完全回答您的问题,您需要重新思考整个过程。将与服务器相关的所有内容移到另一个线程上。当元素可用时,重新加载单元格。尝试创建固定大小的单元格,并在有数据时刷新它。将imageView contentMode 设置为aspectFit。

关于ios - UITableView beginUpdates/endUpdates 滚动时使滚动跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55164021/

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