TableView без результатов ошибка? - PullRequest
0 голосов
/ 04 июня 2018

Я использую tableView.backgroundView, чтобы установить текст по умолчанию, когда мой массив пуст и нет данных для подачи в tableView.Код работает.

Проблема в том, что ДАЖЕ Если есть данные, сначала он вроде «Нет результатов» на долю секунды, но вполне очевидно, а затем tableView перезагружается с фактическими даннымииз массива.Как я могу это исправить?

func numberOfSections(in tableView: UITableView) -> Int {
    var numOfSections: Int = 1
    if comments.count > 0 {
        numOfSections            = 1
        tableView.backgroundView  = nil
    }
    else {
        numOfSections = 0
        activityIndicator.stopAnimating()
        let noDataLabel: UILabel     = UILabel(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: tableView.bounds.size.height))
        noDataLabel.text          = "Silence in the comments! \r\nSay something..."
        noDataLabel.textColor     = UIColor.black
        noDataLabel.textAlignment = .center
        tableView.backgroundView  = noDataLabel
        tableView.backgroundView?.backgroundColor = UIColor.hex("D8D8D8")
        tableView.separatorStyle  = .none
    }
    return numOfSections
}

ОБНОВЛЕНИЕ:

Даже когда я добавляю их в то место, откуда они получают данные, то же самое происходит снова.Состояние отсутствия данных сначала мигает, и оно становится очевидным, а затем показывает фактические результаты.Функция ниже вызывается в viewWillAppear

func loadComments() {
        activityIndicator.startAnimating()

        if let id = postId {

            Api.Post_Comment.REF_POST_COMMENTS.child(id).observe(.childAdded, with: {
                snapshot in

                Api.Comment.observeComments(withPostId: snapshot.key) {
                    comment in
                    self.fetchUser(uid: comment.uid!, completed: {
                        self.comments.append(comment)
                        self.activityIndicator.stopAnimating()
                        self.tableView.reloadData()

                        if self.comments.count > 0 {
                            self.numOfSections = 1
                            self.tableView.backgroundView  = nil
                        }
                        else {
                            print("ELSE")
                        }
                    })
                }
            })
            print("No data")
            self.numOfSections = 0
            self.activityIndicator.stopAnimating()
            let noDataLabel: UILabel  = UILabel(frame: CGRect(x: 0, y: 0, width: self.tableView.bounds.size.width, height: self.tableView.bounds.size.height))
            noDataLabel.numberOfLines = 0
            noDataLabel.text         = "Silence in the comments! \r\nSay something..."
            noDataLabel.textColor     = UIColor.darkGray
            noDataLabel.textAlignment = .center
            self.tableView.backgroundView  = noDataLabel
            self.tableView.backgroundView?.backgroundColor = UIColor.hex("D8D8D8")
            self.tableView.separatorStyle  = .none

        }

    }

1 Ответ

0 голосов
/ 04 июня 2018

Может быть более чистый способ сделать это в одном из методов делегата tableView, но простая отложенная анимация для представления метки в вашем loadComments() методе даст желаемый эффект.

let noDataLabel: UILabel  = UILabel(frame: CGRect(x: 0, y: 0, width: self.tableView.bounds.size.width, height: self.tableView.bounds.size.height))

noDataLabel.alpha = 0
noDataLabel.numberOfLines = 0
noDataLabel.text = "Silence in the comments! \r\nSay something..."
noDataLabel.textColor = UIColor.darkGray
noDataLabel.textAlignment = .center
noDataLabel.backgroundColor = UIColor.hex("D8D8D8")
self.tableView.backgroundView = noDataLabel
self.tableView.separatorStyle = .none

UIView.animate(withDuration: 0.5, delay: 0.5, animations: {
    self.noDataLabel.alpha = 1
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...