Я пытался использовать UIRefreshControll в UIScrollView, но у меня была проблема, что мне нужно было много прокручивать, чтобы обновить его.Мне нужно было использовать обе руки, чтобы заставить его работать, поэтому я решил написать логику прокрутки, чтобы начать обновление.
Теперь проблема в том, что иногда функция endRefreshing не заставляет представление UIRefreshControll исчезать, и я в итоге получаюимея его там навсегда.
Я попытался вызвать endRefreshing в главной очереди с задержкой, и он не работает.Я также попытался установить isHidden в true, а также removeFromSuperView.Мне не повезло заставить его работать.
import UIKit
class RefreshableView : UIView {
@IBOutlet weak var scrollView: UIScrollView!
private let refreshControl = UIRefreshControl()
private var canRefresh = true
var refreshFunction: (() -> ())?
func setupUI() {
backgroundColor = ColorName.grayColor.color
scrollView.refreshControl = refreshControl
}
func endRefreshing() {
self.refreshControl.endRefreshing()
}
}
extension RefreshableView: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y < -100 {
if canRefresh && !self.refreshControl.isRefreshing {
self.canRefresh = false
self.refreshControl.beginRefreshing()
self.refreshFunction?()
}
} else if scrollView.contentOffset.y >= 0 {
self.canRefresh = true
}
}
}