【问题标题】:Table view content jumping down when using UIRefreshControl and setting contentInset使用 UIRefreshControl 并设置 contentInset 时表格视图内容跳下
【发布时间】:2013-08-09 03:09:23
【问题描述】:

所以我有标准的 UITableViewController 子类和表格视图。现在我已将内容插图设置为

self.tableView.contentInset = UIEdgeInsetsMake(40, 0, 0, 0);

我也在以标准方式使用 UIRefreshControl。

self.refreshControl = [[CTRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(loadData:) forControlEvents:UIControlEventValueChanged];

如果表格视图包含足够的滚动数据(因此内容大小高度大于表格视图的高度),则一切正常且顺利。当表中没有足够的数据(例如只有 2 行)时,当我开始下拉时,它会顺利进行,然后突然向下跳大约 20 个点。当我滚动其他方向时也会发生同样的事情。当没有刷新控制或我不更改 contentInset 时,它不会发生。有任何想法吗?全部在 iOS 6 上。

【问题讨论】:

  • 将 contentInset 的变化放在一个动画块中,时长为 0.2 秒。
  • 为什么要更改表格视图的内容插图?在不更改内容插图的情况下,可能有更好的方法。
  • 是的,我也遇到了同样的问题。这显然是iOS中的一个错误。我已将其提交给 Apple,他们已确认。
  • Michal 有没有找到解决方案? @Accatyyc,有雷达号码吗?
  • @jasongregori 由于该错误已在 iOS7 测试版中的某个地方解决,因此并未公开关注。我认为iOS6没有解决方案......

标签: ios ios6 uitableview uirefreshcontrol


【解决方案1】:

你需要像这样把 contentInset 的变化放在一个动画块中...

[UIView animateWithDuration:0.2
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^{
                     self.tableView.contentInset = UIEdgeInsetsMake(40, 0, 0, 0);
                 }
                 completion:nil];

(从内存中输入,因此您可能需要检查代码完成情况)。

这应该可以解决您的问题。

【讨论】:

  • 我在 viewDidLoad 中设置 contentInset,因为内容应始终保持低 40 个点(除非您滚动),所以这没有任何效果。
  • 在 Interface Builder 中设置内容 inset 而不是 viewDidLoad 应该会看到已应用的内容 inset 并且 UITableViewController 将其合并到偏移量中。
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多