如果我的数组中有数据,空的 tableview 标签会闪烁一秒钟

Posted

技术标签:

【中文标题】如果我的数组中有数据,空的 tableview 标签会闪烁一秒钟【英文标题】:Empty tableview label flashes for a second if there is data in my array 【发布时间】:2018-05-30 02:09:44 【问题描述】:

嗨,我搜索了堆栈溢出并看到了If no Table View results, display "No Results" on screen 这很有用,但不完全是我想要的。 我的问题是当我按照这些步骤操作时它可以正常工作。但如果我的 tableview 确实有数据,它会在填充我的数据之前闪烁我的“空 tableview 标签”一两秒。在我看来,这看起来很糟糕。

我有一个通过我的 tableview 上的插座连接的标签,称为 emptyTableViewlbl。这是我的代码被调用。在此先感谢任何帮助。谢谢

extension FeedViewController: UITableViewDataSource, UITableViewDelegate 
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

    if posts.isEmpty 
        emptyTableViewLbl.isHidden = false
        emptyTableViewLbl.text = "Empty tableview label"
        return 0
     else 
        emptyTableViewLbl.isHidden = true
    
    return posts.count


并尝试过

 override func viewDidLoad() 
    super.viewDidLoad()

    tableView.dataSource = self
    tableView.delegate = self
    loadPosts()

    if posts.isEmpty 
        emptyTableViewLbl.isHidden = false
        emptyTableViewLbl.text = "Empty"
     else 
        emptyTableViewLbl.isHidden = true
    


【问题讨论】:

你的numberOfRowsInSection 不能做任何事情,除了返回一个计数。它可以在任何时候被调用任意次数。切勿更新任何视图或任何其他内容,除非返回一个数字。 显示“空”标签的正确位置是loadPosts 完成但未找到任何帖子。 感谢@rmaddy 澄清考虑到几乎每个教程/帖子都说要检查 numberOfRowsInSection。您能否为我们提供解决此问题的正确解决方案。我相信它会帮助很多人谢谢! @Paulw11 感谢您回复我,尽管这是有道理的。在调用之前,我不知道我的 loadPosts 是否真的有数据。因此,我的状况从未得到检查。 @Paulw11 的评论给出了正确的解决方案。根据结果​​更新loadPosts 中的“空”标签。 【参考方案1】:

您可以使用didSet 这样做

假设你的数组是

var posts:[Post] 
  didSet 
     if posts.isEmpty 
        emptyTableViewLbl.isHidden = false
     else 
        emptyTableViewLbl.isHidden = true
        tableview.reloadData()
    
    tableview.isHidden =  !emptyTableViewLbl.isHidden
  


【讨论】:

以上是关于如果我的数组中有数据,空的 tableview 标签会闪烁一秒钟的主要内容,如果未能解决你的问题,请参考以下文章

TableView 数据未加载

tableview 是空的,但我看到操场上的数据来自 urlsession

Swift - 来自URLSession任务的TableView数据源

如何将网格线保留在空的 TableView Javafx 中

为啥我用这些代码得到一个空的 Tableview? JSON

委托通过后无法将数据加载到tableview