То же поведение UICollectionView
, как описано здесь, было вызвано этим вопросом. Несмотря на то, что я решил опубликовать свой собственный, потому что я провел дальнейшие расследования, я не хотел публиковать в комментарии или редактировать вопрос, упомянутый выше.
Что происходит?:
Когда большие ячейки отображаются в UICollectionView
с UICollectionViewFlowLayout
, после прокрутки представления коллекции до определенного смещения ячейки исчезнут.
При прокрутке дальше, пока другая камера не попадет в видимую область, исчезающая/скрытая ячейка снова станет видимой.
Я тестировал с вертикальным списком коллекции прокрутки и полноразмерными ячейками, но я уверен, что это также произойдет с аналогичными настройками для горизонтальной прокрутки.
Что такое большие ячейки?:
Описанное поведение происходит с ячейками, превышающими вдвое больше высоты дисплея (960.f + 1.f
на 3,5-дюймовых дисплеях, 1136.f + 1.f
на 4 дюйма).
Что именно происходит?:
Когда смещение прокрутки в представлении коллекции превышает cell.frame.origin.y + displayHeightOfHardware
, свойство скрытых ячеек установлено на YES
и вызывает вызов -collectionView:didEndDisplayingCell:forItemAtIndexPath:
(например, первая ячейка изменяется на скрытую, когда scrollingOffset.y
достигает 481.f
на 3, 5-дюймовый iPhone).
Как описано выше, при прокрутке до появления следующей ячейки скрытая ячейка снова отображается (т.е. скрытое свойство изменяется на NO
) и, кроме того, при прокрутке достаточно далеко ячейка никогда не исчезнет снова, t, независимо от того, где вы прокручиваете.
Это изменяется при работе с ячейками, большими, чем triple-display-height (1441.f/1705.f
). Они показывают одно и то же поведение, но оно остается неизменным, независимо от того, насколько далеко они прокручиваются вверх и вниз.
Что еще?:
Ситуация не может быть исправлена путем переопределения -(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
для возврата YES
.
Ячейки не могут быть принудительно отображены с установкой скрытого свойства на NO
программно после их скрытия (например, в didEndDisplayingCell
)
Итак, в чем вопрос?:
Я уверен, что это ошибка в UICollectionView/Controller/Cell/Layout
, и я отправлю TSI в Apple. Но тем временем: Есть ли у кого-нибудь идеи для быстрого решения hack?