UIActivityIndicatorView не отображается после прокрутки UITableView

У меня есть контроллер табличного представления, и я отображаю UIActivityIndicatorView в центре экрана в viewDidLoad ()

let bounds = UIScreen.mainScreen().bounds;
        let width = bounds.size.width
        let height = bounds.size.height

        loadingIndicator = UIActivityIndicatorView(frame: CGRectMake(width / 2, height / 2, 75, 75))
        loadingIndicator.layer.cornerRadius = 10
        loadingIndicator.backgroundColor = kfbBlue
        loadingIndicator.center = CGPointMake(width / 2, height / 2 - 37)
        loadingIndicator.activityIndicatorViewStyle = .WhiteLarge
        loadingIndicator.hidesWhenStopped = true
        self.tableView.addSubview(loadingIndicator)
        loadingIndicator.startAnimating()

Это прекрасно работает. У меня есть метод перезагрузки для перезагрузки данных представления таблицы. reload () работает, но если я нажму кнопку, вызывающую этот метод, после прокрутки представления таблицы, индикатор активности не появится. Он появляется только в том случае, если просмотр таблицы прокручивается вверх.

func reload() {
        loadingIndicator.startAnimating()
        self.beginParsing()
    }

Как сделать так, чтобы индикатор активности отображался в центре независимо от того, насколько сильно прокручено представление таблицы?


person raginggoat    schedule 07.03.2016    source источник


Ответы (1)


Не добавляйте UIActivityIndicatorView к UITableView. Добавьте его в центр родительского представления, содержащего UITableView. Вы добавляете его в представление содержимого UITableView, которое будет прокручиваться. Добавьте его снаружи, если хотите, чтобы он сохранялся даже после прокрутки UITableView. Скорее всего примерно так:

self.view.addSubview(loadingIndicator)

вместо твоей линии

self.tableView.addSubview(loadingIndicator)

Если вы используете UITableViewController, самым верхним представлением будет TableView, так что это не сработает. Вместо этого вам придется настроить центр индикатора активности, чтобы учесть расположение прокрутки:

loadingIndicator.center = CGPointMake(width / 2, self.tableView.contentOffset.y + height / 2 - 37)
person wottle    schedule 07.03.2016
comment
Является ли ваш UIViewController a UITableViewController, что означает, что self.view совпадает с self.tableView? - person wottle; 07.03.2016
comment
Это UITableViewController - person raginggoat; 07.03.2016
comment
Итак, самое верхнее представление - это TableView. Таким образом, вам придется настроить центр UIActivityIndicatorView. Я обновлю свой ответ. - person wottle; 07.03.2016
comment
Мне пришлось изменить это на tableView.contentOffset.y, но в остальном он работает. Спасибо. - person raginggoat; 07.03.2016
comment
Ты прав. Кодирование в текстовом редакторе приводит к ошибкам. :) Обновил ответ. - person wottle; 07.03.2016