TableView没有结果错误?

时间:2018-06-04 18:09:18

标签: arrays swift uitableview uiview

当我的数组为空且没有数据要提供给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 :(得分:0)

在其中一个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
})