Структура ячейки разрушается после 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
в infoView
firstView
ограничения становятся дикими и наоборот (у меня все еще нет никаких ошибок, но я знаю, как должны выглядеть эти представления, и это беспорядок). Я пытался использовать self.updateConstraints()
в закрытии перехода, но это не работает.
Кто-нибудь испытывал что-то подобное?
1 ответ
https://developer.apple.com/documentation/uikit/uiview/1622562-transition говорит:
fromView: начальный вид для перехода. По умолчанию это представление удаляется из своего суперпредставления как часть перехода.
Что происходит с ограничениями, когда одна сторона ограничения удаляется из суперпредставления? Это определенно больше не работает.
То, что вы можете попробовать
Обсуждение. Этот метод обеспечивает простой способ перехода от представления в параметре fromView к представлению в параметре toView. По умолчанию представление в fromView заменяется в иерархии представлений представлением в toView. Если оба представления уже являются частью вашей иерархии представлений, вы можете включить параметр showHideTransitionViews в параметре параметров, чтобы просто скрыть или показать их.