TableView 没有结果错误?
Posted
技术标签:
【中文标题】TableView 没有结果错误?【英文标题】:TableView with no results bug? 【发布时间】:2018-06-04 18:09:17 【问题描述】:当我的数组为空且没有数据可提供给tableView
时,我正在使用tableView.backgroundView
设置一些默认文本。代码有效。
问题是即使有数据,首先它会闪烁“无结果”一秒钟但非常明显,然后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
【问题讨论】:
这些代码都不属于numberOfSections
,除了设置计数的几行。 numberOfSections
在table view的使用过程中可以随时调用很多很多次。
好吧,我猜这是个错误。顺便说一句,这是一个最佳答案 - ***.com/a/28533438/4700495 那我该怎么做?
将大部分代码放在它所属的位置 - 您加载数据并填充 comments
的位置。
尽管获得了所有投票,但该链接中的大多数答案都是错误的。
好吧,我已经尝试了你的建议,要么我做的不对,要么没用。因为效果好像是一样的。查看我更新的问题,现在我已经将numberOfSections
方法设置为简单的return numOfSections
,因为我已经将 var 设为全局并且loadComments
函数可以访问它
【参考方案1】:
在其中一个 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
)
【讨论】:
以上是关于TableView 没有结果错误?的主要内容,如果未能解决你的问题,请参考以下文章
当我将 tableview 添加到 ViewController 时,tableview 未正确添加