UIRfreshController проходит через UICollectionView

Это ошибка, которая случается часто, но не всегда. У меня есть элемент управления обновлением, добавленный в мой UICollectionView. Когда я обновляюсь, он работает отлично. Однако, если я обновлю его несколько раз наполовину или даже сделаю полное обновление, перейду на другую вкладку в приложении, а затем вернусь обратно, когда я обновлю, UIRefreshControl появится над частью UICollectionView. Кроме того, вместо того, чтобы начинать с нулевых полос обновления счетчика, он начинается со всех загруженных (хотя я заметил это в других приложениях, таких как Mail, так что это большая ошибка ОС, но в приложениях ОС счетчик не переходит содержимое). Вот изображение проблемы: https://www.dropbox.com/s/4qk6qjrdlapsvz0/IMG_0074.JPG Вот как я настроил RefreshController в ViewDidLoad.

refreshControl = [[UIRefreshControl alloc] init];

[refreshControl addTarget:self action:@selector(refresh2)

forControlEvents:UIControlEventValueChanged];

[self.collectionView addSubview:refreshControl];

self.collectionView.alwaysBounceVertical = YES;

Кто-нибудь знает, как заставить счетчик идти за CollectionViewController? Спасибо


person user1941966    schedule 25.02.2014    source источник
comment
Да, похоже на баг. Ваш код выглядит правильно.   -  person Richard Venable    schedule 25.02.2014
comment
Подал радар. Надеюсь, это исправят.   -  person user1941966    schedule 25.02.2014


Ответы (2)


У меня тоже была эта проблема, и я понял ее, поэтому решил поделиться. что я сделал, так это заставил его вернуться в UICollectionView. Я пробовал другие вещи, такие как sendSubViewToBack и установку zIndex UICollectionViewCell, но это не сработало. Однако ниже все работало, и я тестировал на iOS 6+:

refreshControl.layer.zPosition = -1;

Для iOS 6 добавьте это:

refreshControl.userInteractionEnabled = NO;
person Henry T Kirk    schedule 14.09.2014
comment
Обращать внимание! если вы будете использовать UIImageView или что-то в качестве backgroundView, не забудьте установить для imageView.layer.zPosition значение -2 или ниже. Если вы этого не сделаете, RefreshControl будет скрыт под backgroundView. - person smartDonkey; 19.05.2015
comment
Хотелось бы, чтобы мы могли голосовать за комментарии, спасибо за подсказку о backgroundViews. Сводил меня с ума часами. - person crashoverride777; 23.04.2018

Проблема: вы начинаете прокручивать вниз и частично открываете UIRefreshControl, но не прокручиваете его до конца, чтобы он начал вращаться. Вы переходите к другому представлению (или «сворачиваете» приложение, отправляете его в фоновый режим) и возвращаетесь. Вы немного прокручиваете, и UIRfreshControl отображается поверх вашего представления коллекции, полностью загруженного, нежелательного и не вращающегося.

Решение. Необходимо завершить обновление при отображенииWillDissappear и при переводе приложения в фоновый режим.

var refreshControl = UIRefreshControl()

override func viewDidLoad() {
    super.viewDidLoad()
    refreshControl.addTarget(self, action: #selector(ViewController.methodNameForRefreshing), forControlEvents: .ValueChanged)
    collectionView.addSubview(refreshControl)
    //or
    tableView.addSubview(refreshControl)

    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.willResignActiveNotif), name: UIApplicationWillResignActiveNotification, object: nil)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    refreshControl.endRefreshing()
}

func willResignActiveNotif(notification: NSNotification) {
    refreshControl.endRefreshing()
}
person sweepez    schedule 05.09.2016