Подтвердить что ты не робот

Индикатор активности позиции над удобным видом

Я разместил индикатор активности в UITableView в раскадровке. Как я могу центрировать его в середине экрана и перед представлением таблицы?

Я пробовал:

self.activityIndicator.center = self.tableView.center

Но теперь индикатор активности находится в верхней части окна просмотра!

4b9b3361

Ответ 1

Вот шаги: Последующие инструкции Криссухрама.

  • перетащить вид сверху таблицы. Шаг
  • активность перетаскивания   индикатор на вид
  • Совместите индикатор активности с   горизонтальный и вертикальный центр в контейнере

  • сделать IBOutlet   соединение для индикатора вида и активности

  • запустите   индикатор активности
  • остановить и скрыть: activityIndicatorLarge.hidesWhenStopped = true activityView.hidden = true

Ответ 2

Чтобы отобразить индикатор активности во время загрузки данных в UITableView, вы можете создать UIView и добавить его в основной вид (в центре UITableView). Если вы хотите отобразить его, как показано ниже:

введите описание изображения здесь

Вы можете сделать это с помощью fnuctions setLoadingScreen и removeLoadingScreen (если вы хотите увидеть пример проекта, вы можете пойти здесь)

class TableViewController: UITableViewController {

    // MARK: Properties

    /// Data source of the tableView
    var rows: [String] = []

    /// View which contains the loading text and the spinner
    let loadingView = UIView()

    /// Spinner shown during load the TableView
    let spinner = UIActivityIndicatorView()

    /// Text shown during load the TableView
    let loadingLabel = UILabel()


    // MARK: Methods

    override func viewDidLoad() {

        super.viewDidLoad()

        setLoadingScreen()

        loadData()

    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

    }


    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {

        return 1

    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return rows.count

    }

    override func tableView(tableView: UITableView, cellForRowAt indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath)!
        cell.textLabel!.text = rows[indexPath.row]

        return cell

    }


    // MARK: Private methods

    // Load data in the tableView
    private func loadData() {

        // Simulate a delay of some operations as a HTTP Request            
        DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(20)) {

            self.rows = ["Row 1", "Row 2", "Row 3", "Row 4", "Row 5"]

            self.tableView.reloadData()
            self.tableView.separatorStyle = .singleLine
            self.removeLoadingScreen()

        }

    }

    // Set the activity indicator into the main view
    private func setLoadingScreen() {

        // Sets the view which contains the loading text and the spinner
        let width: CGFloat = 120
        let height: CGFloat = 30
        let x = (tableView.frame.width / 2) - (width / 2)
        let y = (tableView.frame.height / 2) - (height / 2) - (navigationController?.navigationBar.frame.height)!
        loadingView.frame = CGRect(x: x, y: y, width: width, height: height)

        // Sets loading text
        loadingLabel.textColor = .gray
        loadingLabel.textAlignment = .center
        loadingLabel.text = "Loading..."
        loadingLabel.frame = CGRect(x: 0, y: 0, width: 140, height: 30)

        // Sets spinner
        spinner.activityIndicatorViewStyle = .gray
        spinner.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
        spinner.startAnimating()

        // Adds text and spinner to the view
        loadingView.addSubview(spinner)
        loadingView.addSubview(loadingLabel)

        tableView.addSubview(loadingView)

    }

    // Remove the activity indicator from the main view
    private func removeLoadingScreen() {

        // Hides and stops the text and the spinner
        spinner.stopAnimating()
        spinner.isHidden = true
        loadingLabel.isHidden = true

    }

}

Ответ 3

Если этот индикатор активности предназначен для загрузки информации в UITableView, вы должны создать отдельную загрузку UIView с тем же размером, что и UITableView, и поместите индикатор активности в центр этого представления, а не UITableView.

Затем добавьте загрузку UIView в основной вид (над табличным представлением) и установите ее в скрытую или видимую в зависимости от состояния загрузки.

Ответ 4

Если вы используете сложный вид:

 func setupSpinner(){
    spinner = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 40, height:40))
    spinner.color = UIColor(Colors.Accent)
    self.spinner.center = CGPoint(x:UIScreen.main.bounds.size.width / 2, y:UIScreen.main.bounds.size.height / 2)
    self.view.addSubview(spinner)
    spinner.hidesWhenStopped = true
}

Ответ 5

Я думаю, что вы использовали непосредственно UITableView в своем раскадровке. Вот почему вы не можете перетаскивать верхнюю часть uiview основного вида (tableview). Удалите контроллер UItableview и перетащите UIViewController в раскадровку. Затем перетащите в него табличное представление. затем перетащите другой вид над табличным представлением для индикатора активности. не забывайте обрабатывать методы UItableviewdelegate и datasourse в вашем UIViewController.