当我的数组为空且没有数据要提供给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
}
}
答案 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
})