【问题标题】:Jerk When reloading UITableView when User is in bottom of the UITableView当用户在 UITableView 底部时重新加载 UITableView
【发布时间】:2015-08-01 07:03:01
【问题描述】:

全部,

我面临一些简单的问题,例如我有多个部分,我在其中显示每个部分的相关数据,当某一行中的某些 UIButton 操作发生变化时,该部分中的数据会根据它发生变化。

当我在UITableView 的底部时,如果单击某个按钮,则会发生重新加载并且UITableView 会转到上一个位置(部分起始位置)。重新加载数据,我们怎么会处于相同的位置。

【问题讨论】:

  • 你有什么解决办法吗?@ashok Londhe

标签: ios uitableview uibutton reload


【解决方案1】:

重新加载数据后,您可以在此处添加代码到scrollToIndexPath

//set your indexPath
NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:([self.myTable numberOfRowsInSection:0] - 1) inSection:0];

[[self myTable] scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];

我不明白为什么 tableview 中有混蛋。也许您可以只重新加载您正在更改的单元格。试试

NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:3 inSection:0];
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[myUITableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];

【讨论】:

  • animated: 在这种情况下是布尔值.... UITableViewRowAnimationNone 不等于 0... 所以应该是 [tableView scrollToRowAtIndexPath:lastIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];
【解决方案2】:

我观察到当您没有正确设置 estimatedHeightForRowAt 时,reloadData() 函数会产生 Jerk。这个函数应该返回一个接近你认为你的单元格高度的值。如果您的运行时单元格高度和返回值之间的差异太大,那么在重新加载 tableView 时会出现抖动。

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return 400.0
    }

适当地设置这个值,它就不会抖动。许多人认为您可以将任何值传递给它,这并不重要,但事实并非如此。

我在这里超过了 400,因为我的单元格高度从 350-400 到 1200-1300 之类的任何值不等。所以 400 的估计值工作得很好。我尝试了 100,但由于值 100 不合适,所以它突然跳动。

【讨论】:

    猜你喜欢
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 2011-08-26
    相关资源
    最近更新 更多