uicollectionview украшение сломанной рамки?

У меня есть UICollectionView с пользовательским макетом, и я пытаюсь отобразить вид украшения.

Проблема проиллюстрирована некоторым кодом:

attributeDecorationTime.frame = CGRectMake(0.0f,
                                           0.0f,
                                           [self getXOffset],
                                           (epgCollectionView.bounds.size.height+epgCollectionView.contentOffset.y));

Этот код должен отображать декоративный вид, который разделяет экран на две части, если значение [self getXOffest] находится в центре экрана. Левая часть — это представление украшения, а справа мы можем видеть половину представления коллекции, которое не скрыто представлением украшения.

На симуляторе iphone при запуске он работает, как и ожидалось, но когда я начинаю немного прокручивать вниз, я вижу нижнюю часть представления украшения. Я не хочу видеть нижнюю часть декоративного представления, декоративное представление всегда должно покрывать высоту экрана.

Похоже, если я создам epgCollectionView.contentOffset.y*2, это сработает, может быть, это связано с экраном сетчатки? Но почему он при этом закрывает экран, если это проблема сетчатки @2x пикселей???

Теперь, если я использую этот код:

attributeDecorationTime.frame = CGRectMake(0.0f,
                                           epgCollectionView.contentOffset.y,
                                           [self getNowXOffset],
                                           (epgCollectionView.bounds.size.height+epgCollectionView.contentOffset.y));

Вид украшения прокручивается вниз, когда я прокручиваю представление коллекции вниз.

Когда я правильно понимаю, что это значит, в представлении оформления не используются те же x y, что и в обычных ячейках или ячейках заголовков.

Теперь, когда я запускаю первый код на симуляторе ipad, представление украшения, которое должно быть на y = 0, начинается с y = 74, что является положением y представления коллекции в контроллере основного представления.

Может кто-нибудь объяснить мне, что я делаю неправильно???

Мне просто нужен декоративный вид, который покрывает всю высоту экрана на iphone/ipad.

С другой стороны, у меня нет проблем со значением x, которое является шириной представления украшения. Это заставляет меня задуматься, должен ли я аннулировать представление при изменении атрибутов? Пользовательский макет пересчитывает атрибуты при каждой прокрутке. И [self invalidateLayout] в пользовательском макете, похоже, ничего не меняет.


person Kamax    schedule 14.12.2014    source источник


Ответы (1)


Ты пробовал

attributeDecorationTime.frame = CGRectMake(0.0f,
                                       0.0f,
                                       [self getXOffset],
                                       (epgCollectionView.contentSize.height));

Я думаю, вы должны использовать contentSize.height, чтобы покрыть всю высоту содержимого, а не высоту экрана. В прокручиваемом представлении, таком как UICollectionView, contentSize обычно больше, чем размер экрана.

person dopcn    schedule 08.05.2015