我有一个内置UITableViewController
的UIRefreshControl
。我有两个问题,我想修复刷新动画。
该控件是从UIStoryboard设置的。我从那里设置了目标和色调。当操作触发时,我的代码刷新来自我们服务器的数据,服务器在服务器响应时有回调。我从那里停止刷新控制:
dispatch_async(dispatch_get_main_queue(), ^{
[self.refreshControl endRefreshing];
});
...
[self.tableView reloadData];
我做错了什么或UIRefreshControl
在iOS 11中只是错误?
我遇到了类似的问题,这就是我最终修复它的方式:
reloadData()
引起明显的跳跃。这是here解释endRefreshing()
也会导致明显的跳转。为了避免这种情况
当我从服务器收到新数据时,我会检查用户是否仍在拖动(UIScrollView.isDragging
)。如果是这种情况,那么我不会立即调用endRefreshing()
,而是设置一个标志。
我重写scrollViewDidEndDragging
并检查那里的旗帜;如果设置,那么我调用endRefreshing()
并清除标志。UIRefreshControl
在这一点上有点神秘(它受到许多事情的影响 - 你使用大型游戏,在refreshControl
或其他地方设置viewDidLoad
等)
摆脱这些问题的最好方法是停止观察valueChanged
的UIRefreshControl
并在你确定没有拖拽之后做reloadData
/ endRefreshing
(例如scrollViewDidEndDragging
)。
此外,我能够通过这种方式从您的gif重现UIRefreshControl
的活动指示器闪烁(仅适用于没有导航栏半透明的iPhone X类设备):
edgesForExtendedLayout = [.top]
extendedLayoutIncludesOpaqueBars = true
那么我所要做的就是改变edgesForExtendedLayout
和extendedLayoutIncludesOpaqueBars
。