Я использую UICollectionViewFlowLayout
, чтобы упорядочить просмотр фрагментов в горизонтальном прокрутке. По умолчанию, я заставляю их квадрат с помощью UICollectionViewDelegateFlowLayout
:Анимация изменений в UICollectionViewFlowLayout
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
var nominalSize = CGSize(width: collectionView.frame.height, height: collectionView.frame.height)
return nominalSize
}
Таким образом я получаю квадратные плитки, размер, независимо от тока collectionView
есть. Однако, есть состояние, при котором я могу изменить, что номинальный размер для некоторых плиток, поэтому она развивается немного выглядеть следующим образом:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
var nominalSize = CGSize(width: collectionView.frame.height, height: collectionView.frame.height)
if someTest(indexPath) {
nominalSize = self.tweakNominalSize(nominalSize)
}
return nominalSize
}
То, что я не понял, это как вызвать представление коллекции в) отзыве делегат на ретрансляцию и B), как заставить его оживить изменения.
То, что я пробовал:
1)
self.myCollectionView.setNeedsLayout()
UIView.animateWithDuration(200.milliseconds) {
self.myCollectionView.layoutIfNeeded()
}
Это ничего не делает. print()
заявления в обратном вызове делегата показывают, что он никогда не вызывается.
2)
self.schedulesView.setCollectionViewLayout(
self.schedulesView.collectionViewLayout,
animated: true)
Это также не делает ничего. Я не уверен, что он умный или что. Может быть, он достаточно умен, чтобы заметить, что они идентичны и отказываются?
3)
self.schedulesView.startInteractiveTransition(
to: self.schedulesView.collectionViewLayout,
completion: nil)
self.schedulesView.finishInteractiveTransition()
Это вызывает расположение случиться! Но не анимация вообще. Он просто внезапно меняется. Кажется, что правая сторона плитки остается там, где она была, а не левая. Кажется, что это происходит после других изменений пользовательского интерфейса, которые я произвел между двумя вызовами.
'performBatchUpdates (_: завершение:)'? – matt
Хотите поставить это в форме ответа? Или я, если вы этого не сделаете. :) –