UITableViewCell-隐藏未使用的视图还是什至不添加它们?

时间:2019-05-29 21:25:43

标签: ios swift uitableview stackview

我有一个简单的问题,没有找到与之相关的在线信息。


什么更实用?

  • 具有一个 TableViewCell ,该子视图具有10个以上的子视图(在堆栈视图内部),但是通常只显示3-4个,其他隐藏。
  • 或者具有一个空的stackview,并根据需要通过代码添加每个视图。

例如,第二个选项:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    var cell : PostCell

    guard let post = PostsStore.shared.posts.getPost(index: indexPath.row) else {
        return UITableViewCell()
    }



    // Remove reused cell's stackview's views
    cell.stackView.subviews.forEach({ $0.removeFromSuperview() })

    if post.voteAddon != nil {

        if let voteView = Bundle.main.loadNibNamed("VoteView", owner: self, options: nil)?.first as? VoteView {
            voteView.voteForLabel = "Vote for X or Y"

            voteView.buttonX.setTitle("\(post.votes.x) votes", for: .normal)
            voteView.buttonY.setTitle("\(post.votes.y) votes", for: .normal)

            cell.stackView.addArrangedSubview(voteView)
        }
    }
    if post.attachments != nil {

        if let attachmentsView = Bundle.main.loadNibNamed("AttachmentsView", owner: self, options: nil)?.first as? AttachmentsView {
            attachmentsView.attachmentImageView.image = UIImage()


            cell.stackView.addArrangedSubview(attachmentsView)
        }
    }


    cell.delegate = self


    return cell


}

这只是一个例子,实际上这些视图更为复杂。


哪个更实用?第一个选项比较容易,但是第二个选项可能对内存处理更好。.您对此有何看法?

1 个答案:

答案 0 :(得分:1)

  

TableViewCell具有超过10个以上的子视图(在堆栈视图内部),但是通常只显示3-4个,其他则被隐藏

所示的3-4表示7+-6+已隐藏但仍在内存中,因此我更喜欢在单元格可见时将添加/删除的即时处理负载添加到永久内存中

值得一提的是,这在很大程度上取决于一次可见单元的数量,例如,如果全屏,则选项1优于2,因为随着可见单元数量的增加,单元会出队,选项2会变得更好