Тень / ячейка мерцает при анимации высоты - PullRequest
0 голосов
/ 14 июля 2020

У меня проблема с тенью на моих ячейках (нажмите GIF, чтобы увидеть анимацию):

введите описание изображения здесь

Тень мерцает, когда я вызываю beginUpdates:

cell.tappedParentView
    .subscribe(onNext: { [weak self] in
        guard let self = self else { return }
        cell.animate()
        self.tableView.beginUpdates()
        self.tableView.endUpdates()

        self.expandedIndexPaths[indexPath] = !self.expandedIndexPaths[indexPath].or(false)
    })
    .disposed(by: cell.cellBag)

Код анимации animate в ячейке выглядит следующим образом:

func animate() {
    spacerViewHeightConstraint?.constant = isExpanded ? 0.0 : 8.0

    parentView.updateLayout(isExpanded: !self.isExpanded)
    UIView.animate(withDuration: 0.2) {
           self.childViews.forEach {
               $0.isHidden = self.isExpanded
               $0.alpha = self.isExpanded ? 0.0 : 1.0
           }

         self.layoutIfNeeded()
    }

    isExpanded.toggle()
}

И updateLayout:

func updateLayout(isExpanded: Bool, animated: Bool = true) {
    stackViewLeadingConstraint.constant = isExpanded ? 8.0 : 16.0
    stackViewTrailingConstraint.constant = isExpanded ? 8.0 : 16.0
    stackViewTopConstraint.constant = isExpanded ? 8.0 : 16.0
    stackViewBottomConstraint.constant = isExpanded ? 0.0 : 16.0

    let layout = {
        self.layoutIfNeeded()

        self.shadow = isExpanded ? nil : .card
        self.backgroundImageView.alpha = isExpanded ? 0.0 : 1.0
        self.containerView.backgroundColor = isExpanded ? .clear : .red
        self.titleLabel.textColor = isExpanded ? Theme.text100 : .white
        self.descLabel.textColor = isExpanded ? Theme.text100 : .white

        self.startingLabel.alpha = isExpanded ? 0.0 : 1.0
        self.startingLabel.isHidden = isExpanded

        self.priceLabel.alpha = isExpanded ? 0.0 : 1.0
        self.priceLabel.isHidden = isExpanded

        self.showLessButton.isHidden = !isExpanded
        self.showLessButton.alpha = isExpanded ? 1.0 : 0.0

        self.stackView.spacing = isExpanded ? 8.0 : 4.0
    }

    if animated {
        UIView.animate(withDuration: 0.2) { layout() }
    } else {
        layout()
    }
}

Если я выполняю анимацию без вызова self.tableView.beginUpdates() и self.tableView.endUpdates(), мерцания не происходит, но, конечно, высота ячейки не регулируется соответствующим образом. Я действительно не знаю, как это исправить. Все представления и ячейки имеют прозрачный фон (только фон табличного представления имеет цвет solid). clipToBounds отключен для view и contentView в каждой ячейке / представлении. Я также пробовал использовать solid цветов в качестве фона, но, похоже, это не имеет никакого значения. Как я могу это исправить?

Будем признательны за любые указатели! Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...