UIRefreshControl 导致不正确的 TableView 偏移量

Posted

技术标签:

【中文标题】UIRefreshControl 导致不正确的 TableView 偏移量【英文标题】:UIRefreshControl result in incorrect TableView offset 【发布时间】:2016-07-06 08:07:48 【问题描述】:

performSegueWithIdentifier: 从 TableViewContorller(例如 aTVC)到另一个(例如 bTVC)时,如果我在显示 UIRefreshControl 时点击 bTVC 上的后退按钮,将导致不正确的偏移量TableViewaTVC:

黑色部分是由于在点击返回按钮时显示bTVCUIRefreshControl 时导航栏的高度不同:

我在从bTVC切换之前尝试取消refreshControl,但没有成功。

有什么想法吗?

【问题讨论】:

尝试停止viewDidDisappearviewWillDisappear上的刷新控制动画? -endRefreshing 都试过了。还是一样。 显示你在哪里启动UIRefreshControl的代码,你是如何将它添加到UITableView的,你是如何尝试endRefreshing的。 几个月前我已经完全删除了这个功能,因为我在雷达上看到它没有正确的解决方案,只要你这样做不阻止其他用户交互。问题是当您结束刷新并且用户决定在没有 RC 的 VC 之间导航时,它会中断。由于阻止 UI 交互违反了 Apple 的准则,因此在这种情况下最好不要使用它。 【参考方案1】:

尝试在ViewDidLoad(或您想要的位置)中添加UIRefreshControl,并在viewWillDisappear 中删除(refreshControl.removeFromSuperview())而不是endRefreshing

【讨论】:

从超级视图中移除它与结束刷新不同,因为前者只会让它在没有适当动画的情况下消失,并且可能会破坏 RC 代码结构(线程等)中的东西。这与您何时执行无关,因为 VC 导航系统与您的 RC 动画异步执行转换,以不正确的顶部位置渲染 VC 的内容视图。

以上是关于UIRefreshControl 导致不正确的 TableView 偏移量的主要内容,如果未能解决你的问题,请参考以下文章

将 UIRefreshControl 置于滚动 UICollectionView 上方的正确方法是啥?

UIRefreshControl addTarget 操作导致“无法识别的选择器”错误

使用UIRefreshControl刷新表视图

需要为 UIRefreshControl 实现超时机制。

UITableView 内部的 UIRefreshControl 导致应用程序在旋转时冻结 - iOS 6+

django使用pycharm目录打开不正确导致的问题