UIRefreshControl 导致不正确的 TableView 偏移量
Posted
技术标签:
【中文标题】UIRefreshControl 导致不正确的 TableView 偏移量【英文标题】:UIRefreshControl result in incorrect TableView offset 【发布时间】:2016-07-06 08:07:48 【问题描述】:当performSegueWithIdentifier:
从 TableViewContorller(例如 aTVC
)到另一个(例如 bTVC
)时,如果我在显示 UIRefreshControl
时点击 bTVC
上的后退按钮,将导致不正确的偏移量TableView
在aTVC
:
黑色部分是由于在点击返回按钮时显示bTVC
的UIRefreshControl
时导航栏的高度不同:
我在从bTVC
切换之前尝试取消refreshControl,但没有成功。
有什么想法吗?
【问题讨论】:
尝试停止viewDidDisappear
或viewWillDisappear
上的刷新控制动画?
用-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 操作导致“无法识别的选择器”错误