быстрая тяга для обновления

у меня есть refreshcontroller с scrollview..

  self.refreshControl = UIRefreshControl()
        self.refreshControl.attributedTitle = NSAttributedString(string: "Frissítéshez húzzad! :)")
        self.refreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)
        self.scrollView.addSubview(refreshControl)

func refresh(sender:AnyObject)
    {

//my refresh code here..

            self.refreshControl.endRefreshing()
    }

Я добавляю как subview к scrollView. Он работает, когда содержимое страницы занимает overflowing экрана. но проблема возникает, когда я не получил много данных, и это не overflowing, функция pull and refresh не работает. :(

Я не использую tableview.

Может ли кто-нибудь помочь мне, как решить эту проблему?


person solarenqu    schedule 22.04.2015    source источник


Ответы (4)


self.scrollView.scrollEnabled = true
self.scrollView.alwaysBounceVertical = true

var alwaysBounceVertical: Bool // по умолчанию НЕТ. если YES и bounces — YES, даже если содержимое меньше границ, разрешить перетаскивание по вертикали

person Hugo    schedule 22.04.2015

Обновление iOS 10

alwaysBounceVertical не совсем верно, а refreshControl введено:

  1. Все версии iOS: всегда требуется bounces, если contentSize меньше frame.
  2. Версии до iOS 10: alwaysBounceVertical также требуется для небольшого контента.
  3. iOS 10+: уведомить UIScrollView о существовании UIRefreshControl с помощью refreshControl

- iOS 10

UIRefreshControl теперь поддерживается UIScrollView, используя refreshControl так же, как UITableView в предыдущей ОС.
Это означает, что процесс перетаскивания безупречен, без дрейфа.
Следуйте касанию и перетаскиванию белой стрелки на анимации ниже: они синхронизированы

«iOS

↻ воспроизведение анимации

- iOS 9 и более ранние версии

Вы можете добавить UIRefreshControl вручную к UIScrollView, но это представление не знает о таком элементе, и обновление может дрейфовать.
Обратите внимание, насколько сложнее выполнять обновление на анимации ниже. : прокрутка белой стрелки смещается и требует гораздо большего расстояния для срабатывания элемента управления

iOS 9

↻ анимация воспроизведения


Обход refreshControl несоответствий ОС с помощью этого вида прокрутки extension:

var _refreshControl : UIRefreshControl? {
    get {
        if #available(iOS 10.0, *) {
            return refreshControl
        } else {
            return subviews.first(where: { (view: UIView) -> Bool in
                view is UIRefreshControl
            }) as? UIRefreshControl
        }
    }

    set {
        if #available(iOS 10.0, *) {
            refreshControl = newValue
        } else {
            // Unique instance of UIRefreshControl added to subviews
            if let oldValue = _refreshControl {
                oldValue.removeFromSuperview()
            }
            if let newValue = newValue {
                insertSubview(newValue, at: 0)
            }
        }
    }
}

► Найдите это решение на GitHub.

person SwiftArchitect    schedule 08.04.2017
comment
Строка return refreshControl (iOS 10) снова вызвала геттер, рекурсивно. Мне пришлось переименовать _refreshControl во что-то другое, например customRefresh. - person André Pinto; 24.04.2017
comment
Я хочу отключить эффект подпрыгивания представления коллекции и включить элемент управления обновлением. Как я могу это сделать ? - person Nisha Nair; 17.07.2019

Да Мы можем использовать управление обновлением для UIScrollView, UITableview, UicollectionVIew..

Вот код для PULL TO REFRESH,

var refreshControl: UIRefreshControl!
override func viewDidLoad()  {
    super.viewDidLoad()

    scrollView.alwaysBounceVertical = true
    scrollView.bounces  = true
    refreshControl = UIRefreshControl()
    refreshControl.addTarget(self, action: #selector(didPullToRefresh), for: .valueChanged)
    self.scrollView.addSubview(refreshControl)
 }

@objc func didPullToRefresh() {

   print("Refersh")

  // For End refrshing
  refreshControl?.endRefreshing()  


 }
person Ketan    schedule 04.07.2017

Этот UIRfreshControl не должен работать для UIScrollView. Предполагается, что он должен быть связан с таблицей через связанный объект контроллера табличного представления.

Примечание. Поскольку элемент управления обновлением специально разработан для использования в табличном представлении, управляемом контроллером табличного представления, его использование в другом контексте может привести к неопределенному поведению.

Справочник по классу UIRefreshControl

person Ruud Kalis    schedule 22.04.2015
comment
Согласно цитируемой документации, три года спустя похоже, что ScrollViews теперь поддерживаются. (подтвердил тестом). - person Tony Adams; 19.07.2018