Я пытаюсь анимировать между различными подклассами UICollectionViewFlowLayout. Каждый макет потока определяет другой размер элемента. В одной из них отображается сетка с тремя элементами, другая - сеткой с двумя элементами, а третья - только с одним элементом (выглядит как UITableView).Анимация Изменение размера ячейки UICollectionView, вызванное коммутационными макетами
Я звоню setCollectionViewLayout: анимированный: для этого. Анимация размеров ячеек работает отлично. Однако подпункты немного беспорядочны. Каждая ячейка содержит изображение и ярлык (удалили метку на данный момент). Я хочу, чтобы изображение оживляло его изменение размера, поскольку ячейка изменяется в размере, также как и метка.
Если я использую автоматическую компоновку (не очень хорошо это пока), чтобы разместить подвыборы моей ячейки, то в начале анимации изображение будет изменено до кадра ячейки назначения. Я понимаю, как анимация UIView работает в том, что они сразу меняют анимированное свойство, а анимация выполняется на уровне презентации, но я ожидал, что автомат будет работать по-другому.
Если удалить Автокомпоновка и выполните следующие действия в initWithFrame:
[[self imageView] setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleRightMargin];
затем размер подвид изображения оживляет довольно хорошо, однако после того, как езда на велосипеде через несколько анимаций размер изображения подтаблицы и расположение неверно в в некоторых случаях.
Я пробовал выкладывать subviews в layoutSubviews, но это дает тот же результат, что и AutoLayout.
Все демонстрации, которые я видел на github для анимации между UICollectionViewLayouts, имеют только цветной фон или подзаголовок, который заполняет всю ячейку. Кто-нибудь сумел заставить это работать?
Ниже приведены изображения того, что происходит (красная линия границы UIImageView):
Back to first layout, but subview frames are wrong
Я собираюсь экспериментировать с этим в ближайшие несколько дней. Я считаю, что если у вас есть макет изображения без ограничений по высоте или ширине и ограничить ведущее, конечное, верхнее и нижнее пространство в представлении контейнера, тогда вы должны получить желаемый эффект. – johnrechd
Привет, у меня такая же проблема. Не могли бы вы сообщить мне, если вы нашли решение, пожалуйста! –