У меня проблема с тенью на моих ячейках (нажмите 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 цветов в качестве фона, но, похоже, это не имеет никакого значения. Как я могу это исправить?
Будем признательны за любые указатели! Спасибо!