我想在我的应用程序的主表视图控制器中设置UIRefreshControl,以触发刷新功能以(您现在可能已经猜到了)刷新它。
添加它不是问题,我可以通过情节提要(通过启用刷新)或在控制器中(通过使用self.refreshControl = UIRefreshControl()
)对其进行设置。
当它被用户触发时,它将开始正常刷新,但是当我通过self.refreshControl.beginRefreshing()
触发它时,该控件不会显示在导航栏中,直到我向下滚动(就像您通常触发它一样)< / p>
但这还不是最奇怪的部分。最终对用户可见时,它会不断闪烁,过一会儿根本看不到。
对于self.refreshControl.endRefreshing()
方法,该动画实际上会突然断断续续,有时导航栏不会再次向上滚动(顶部留有空白)
这是一个gif,应该总结my problem
我使用swift 4.2,该应用程序已在不同的模拟器(运行iOS 12.1)和我的iPhone X(运行iOS 12.1.2)上进行了测试,发布目标是iOS 10.0。
我已经对我的问题进行了研究,但似乎没有人遇到确切的问题(至少是闪烁的问题),或者解决方案对我不起作用。
这是我的视图控制器的设置方式:
class MyViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.refreshControl = UIRefreshControl()
self.refreshControl?.addTarget(self, action: #selector(reload), for: .valueChanged)
self.refreshControl.beginRefreshing()
}
@objc func reload() {
DispatchQueue(label: "update").async {
sleep(10)
DispatchQueue.main.async {
self.refreshControl?.endRefreshing()
}
}
}
}
感谢阅读,我真的希望有人能帮助我。
我刚刚发现问题仅出现在具有大标题的非半透明导航栏上,因此选择一个半透明导航栏而不是不透明导航栏是一个解决方案(很不幸,我不希望这样)。也许有人可以使用不透明的导航栏来实现功能性的刷新控件。
此外,我还向Apple提交了一个错误报告,因为这样的事情首先不应该发生,当他们回到我身边时,我将对其进行更新。