У меня есть UICollectionView, который расширяется при нажатии на ячейку, и после заполнения экрана он становится прокручиваемым.
Теперь, когда я прокручиваю вниз, мне нужно, чтобы мой заголовок прокручивался вместе с ним, и для этого я реализовал логику в методе layoutAttributesForSupplementaryViewOfKind
в своем пользовательском классе UICollectionViewLayout
.
Это отлично работает, но теперь проблема в том, что когда я прокручиваю содержимое, я прокручиваю несколько ячеек вниз и сразу же нажимаю на ячейку, чтобы сжать содержимое обратно до одного экрана, в этот момент представление заголовка не упорядочивается, т.е. остается в последней прокручиваемой позиции.
Но после этого, если я выполняю любое другое действие, например касание сотовой связи, оно упорядочивается должным образом.
Я пробовал вызывать setNeedsLayout
, setNeedsDisplay
и layoutSubviews
, где я перезагружаю свой UICollectionView, но заголовок по-прежнему не обновляется до своего правильного положения.
Ниже приведен код моего метода layoutAttributesForSupplementaryViewOfKind
.
Любая помощь приветствуется.
- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
if (![kind isEqualToString:[myGridHeaderView kind]]) {
return nil;
}
myGridHeaderPosition headerPosition = [[self collectionView] headerPositionAtIndexPath:indexPath];
CGRect cellRect = [[self delegate] getRectForHeaderAtIndex:indexPath headerPosition:headerPosition];
if (CGRectEqualToRect(cellRect, CGRectZero)) {
return nil;
}
myGridHeaderLayoutAttribute* attributes = [myGridHeaderLayoutAttribute layoutAttributesForSupplementaryViewOfKind:kind withIndexPath:indexPath];
CGPoint centerPoint = CGPointMake(CGRectGetMidX(cellRect), CGRectGetMidY(cellRect));
CGSize size = cellRect.size;
UICollectionView * const cv = self.collectionView;
NSInteger zIndex = 1;
CGPoint const contentOffset = cv.contentOffset;
if (contentOffset.x > 0)
{
if (headerPosition != myGridHeaderPositionColumn)
{
centerPoint.x += contentOffset.x;
}
zIndex = 1005;
}
if (contentOffset.y > 0)
{
if (headerPosition != myGridHeaderPositionRow)
{
centerPoint.y += contentOffset.y;
}
zIndex = 1005;
}
if (headerPosition == myGridHeaderPositionCommon) {
zIndex = 1024;
}
attributes.zIndex = zIndex;
attributes.headerPosition = headerPosition;
attributes.center = centerPoint;
attributes.size = size;
attributes.alpha = 1.0;
return attributes;
}