Swift 4 UIActivityIndicatorView не центрирован на UITableView - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь центрировать мой UIActivityIndicatorView в UITableView, вот как я создаю свой UIActivityIndicatorView:

indicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) as UIActivityIndicatorView

//Set the activity indictor center
indicator.center = self.view.center

//Hide the indicator when its stopped.
indicator.hidesWhenStopped = true

//Set the style of the activity indicator
indicator.style = UIActivityIndicatorView.Style.white

//Set the background colour of the activity indicator
indicator.backgroundColor = UIColor(white: 0.0, alpha: 0.6)

//Make the activity indicator have rounded corners
indicator.layer.cornerRadius = 15

//Add activity indicator to view
self.view.addSubview(indicator)

//Start activity indicator
self.indicator.startAnimating()

Но когда я прокручиваю свой UITableView вверх, я не вижу свой UIActivityIndicatorView, я пробовал следующее:

override func viewWillLayoutSubviews() {
    self.indicator.center = self.view.center
}

Но это не сработало.

Я также пробовал:

override func viewWillLayoutSubviews() {
    self.indicator.translatesAutoresizingMaskIntoConstraints = true
    self.indicator.frame = self.view.bounds
    self.indicator.center = self.view.center
}

Тоже не работал, что я делаю не так?

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

1 Ответ

0 голосов
/ 15 марта 2019

Вы не можете центрировать внутри UITableViewController, так как это представление с прокруткой, а представление с прокруткой - это представление View Controller. Тем не менее, вы можете центрировать его внутри окна так:

// get the visible window
let window = UIApplication.shared.keyWindow!
let viewActivity = UIActivityIndicatorView(style: .whiteLarge)
// set your activity indicator's center to the center of the screen
viewActivity.center = window.center
viewActivity.hidesWhenStopped = true
// add the indicator to the active window (not your uitableviewcontroller) 
// and make sure it is at the front (so it is visible)
window.addSubview(viewActivity)
window.bringSubviewToFront(viewActivity)
viewActivity.startAnimating()

Вы также можете сделать это, взяв свой корневой Навигационный контроллер или контроллер представления вкладок, и также отцентрировав его там.

...