У меня проблемы с сокрытием refreshControl, когда пользователь покидает ViewController, а refreshControl все еще виден. Я попытался установить его, удалив его из superView (tableView), заменив его новым и т. Д. ... Проблема все еще остается с tableView, когда пользователь возвращается к экрану, верхние вставки содержимого остаются из refreshControl ранее, и он оставляет пустое пространство на наверху tableView, и если я не заменю / не скрою refreshControl, он будет виден в этот момент.

Какие-либо предложения?

Изображение: При переходе между экранами refreshControl не скрывается в viewDidDisappear

0
Tomaž Ravljen 31 Авг 2017 в 16:28

4 ответа

Лучший ответ

Я связался с другом, который дал действительно хороший ответ. Это был код, который помог мне плавно удалить refreshControl в случае, если он застрял в замороженном состоянии на экране:

func forceHideRefreshControl(tableView: UITableView) {
    if tableView.contentOffset.y < 0 { // Move tableView to top
        tableView.setContentOffset(CGPoint.zero, animated: true)
    }
}

Хотя, если контроллер представления не завершил загрузку, он не будет иметь видимый refreshControl. Для этого вам нужно снова вызвать beginRefreshing (), но я бы сделал это с задержкой, чтобы избежать проблем с анимацией. В любом случае, я думаю, что это было лучшее решение, которое фактически убрало интервал белого сверху. Я не знаю, почему endRefreshing () не работал, но, по крайней мере, я нашел другой способ. Надеюсь, это кому-нибудь поможет! :)

ПРИМЕЧАНИЕ. . Однако это решение протестировано только на закрепленном / замороженном элементе управления refreshControl. Я не знаю, какой эффект это даст, если у вас нет этой проблемы, но все же используйте это решение для сокрытия refreshControl.

0
Tomaž Ravljen 31 Авг 2017 в 19:33

Попробуйте это: -

refreshControl.tintColor = .clear
2
sn86 31 Авг 2017 в 13:36

Инициализируйте элемент управления обновлением:

lazy var refreshControl: UIRefreshControl = {
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action: 
                     #selector(ViewController.handleRefresh(_:)), 
                     for: UIControlEvents.valueChanged)
        refreshControl.tintColor = UIColor.red

        return refreshControl
    }()

Обработка обновления и завершение обновления:

func handleRefresh(_ refreshControl: UIRefreshControl) {
        self.tableView.reloadData()
        refreshControl.endRefreshing()
    }

Добавьте элемент управления обновлением:

self.tableView.addSubview(self.refreshControl)
1
Saurabh Jain 31 Авг 2017 в 13:41

Когда вы представляете новый экран, просто используйте .endRefreshing() на вашем refreshControl.

0
Alex Ioja-Yang 31 Авг 2017 в 13:32