Структура ячейки разрушается после UIView.transition

В одном из моих контроллеров я использую UICollectionView с двухсторонними ячейками (на лицевой стороне ячейки есть кнопка, и, если пользователь нажимает на нее, ячейка должна показать ему / ей другую сторону ячейки).

поэтому у меня есть это в моем классе клетки:

firstView = UIView()
...
self.addSubview(firstView)

infoView = UIView()
...
self.insertSubview(infoView, belowSubview: firstView)

Оба представления имеют много элементов, для структурирования этих элементов я использую в основном ограничения и привязки визуального формата.

т.е.

let topFirstViewConstraint = firstView.topAnchor.constraint(equalTo: self.topAnchor, constant: 4)
        allConstraints.append(topFirstViewConstraint)
...
let goButtonCenter = goButton.centerXAnchor.constraint(equalTo: firstView.centerXAnchor, constant: 0)
        allConstraints.append(goButtonCenter)

Для переключения между лицом и видом сзади я использую UIView.transition:

UIView.transition(from: firstView, to: infoView, duration: 0.2, options: .transitionFlipFromLeft) { (success) in

        }

Это работает как шарм, у меня нет никаких ошибок autoLayout вообще.

Но если я пытаюсь переключиться с firstView в infoViewfirstView ограничения становятся дикими и наоборот (у меня все еще нет никаких ошибок, но я знаю, как должны выглядеть эти представления, и это беспорядок). Я пытался использовать self.updateConstraints() в закрытии перехода, но это не работает.

Кто-нибудь испытывал что-то подобное?

1 ответ

https://developer.apple.com/documentation/uikit/uiview/1622562-transition говорит:

fromView: начальный вид для перехода. По умолчанию это представление удаляется из своего суперпредставления как часть перехода.

Что происходит с ограничениями, когда одна сторона ограничения удаляется из суперпредставления? Это определенно больше не работает.

То, что вы можете попробовать

Обсуждение. Этот метод обеспечивает простой способ перехода от представления в параметре fromView к представлению в параметре toView. По умолчанию представление в fromView заменяется в иерархии представлений представлением в toView. Если оба представления уже являются частью вашей иерархии представлений, вы можете включить параметр showHideTransitionViews в параметре параметров, чтобы просто скрыть или показать их.

Другие вопросы по тегам