UIRfreshControl и фоновый просмотр UITableView

У меня есть UITableViewController, на котором я установил backgroundView. В этом контроллере установлен UIRfreshControl. Проблема в том, что когда я устанавливаю фоновый вид, элемент управления обновлением невидим. Если я уберу фоновый вид, я увижу элемент управления обновлением.

Я делаю что-то неправильно?


person leftspin    schedule 19.09.2013    source источник
comment
Если вам понравился какой-либо из приведенных ниже ответов, пожалуйста, отметьте один из них как правильный ответ. Это повысит вашу репутацию, а ответ композитора.   -  person gardenofwine    schedule 15.10.2013


Ответы (4)


Причина такого поведения заключается в том, что в iOS 7 backgroundView UITableView отображается над UIRefreshControl. Не уверен, что это по дизайну или проблема, но вот обходной путь, который исправил это для меня:

   self.tableView.backgroundView.layer.zPosition -= 1;

Этот код идет туда, где вы настраиваете свой ресурс UITableViewController refreshControl.

person Champoul    schedule 20.09.2013
comment
Это работает. Вот еще один, возможно, более семантически понятный способ: self.refreshControl.layer.zPosition = self.tableView.backgroundView.layer.zPosition + 1; - person Donald; 27.09.2013
comment
Дайте этому парню пива! Спасибо за это! :) - person TeaCupApp; 13.04.2014
comment
Это так уродливо, но это спасло меня от моих страданий. Спасибо Шампуль! - person Michal; 03.09.2014
comment
Это не очень хорошее решение, если у вас есть панель поиска, потому что это приводит к тому, что элемент управления обновлением появляется поверх панели поиска. - person Jordan H; 04.12.2014

Вы можете попробовать отправить фон на задний план или элемент управления обновлением на передний план. Элемент управления обновлением, скорее всего, просто находится в индексе 0.

person Mark McCorkle    schedule 19.09.2013

Кажется, что UITableViewController возвращает свой UIRefreshControl обратно к индексу 0 во время перезагрузки (за его «backgroundView»), независимо от того, какой индекс вы поместили в первую очередь. Вот что сработало для меня (iOS 9): отключить обновление в IB. Создайте UIRfreshControl в коде и добавьте его в tableView после настройки backgroundView:

    let someView = UIView()

    self.tableView.backgroundView = someView

    let refreshControl = UIRefreshControl()

    refreshControl.addTarget(self, action: #selector(MyTableViewController.refresh(_:)), forControlEvents: .ValueChanged)

    self.tableView.insertSubview(refreshControl, atIndex: 1)
person Jovan Stankovic    schedule 05.05.2016

Эту проблему легко решить, не используя свойство self.refreshControl в UITableViewController, вместо этого создайте для него собственное свойство, и оно будет работать нормально.

person Dmitrij Mazurenko    schedule 15.02.2017