UITableViewCell - скрывать неиспользуемые представления или даже не добавлять их? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть простой вопрос, для которого я не нашел ничего связанного в Интернете.


Что более практично?

  • Наличие TableViewCell у которого более 10+ подпредставлений (внутри стекового вида), но обычно отображается только 3-4, другие скрыты.
  • Или с пустым стековым видом и добавлением каждого вида по коду при необходимости.

Например, для второго варианта:

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 Ответ

1 голос
/ 30 мая 2019

Наличие TableViewCell, которое имеет более 10+ подпредставлений (внутри стекового представления), но обычно отображается только 3-4, остальные скрыты

3-4 означает, что 7+ - 6+ скрыты, но все еще находятся в памяти, поэтому я предпочитаю мгновенную загрузку процесса добавления / удаления для существования постоянной памяти, когда ячейка видна

Стоит также сказать, что это сильно зависит от количества видимых ячеек за раз, например, если это полноэкранный режим, то вариант 1 лучше, чем 2, потому что ячейки снимаются с очереди, так как количество видимых ячеек увеличивается, опция 2 становится лучше

...