3

Я пытаюсь смещать центр по оси y всех ячеек под выбранной ячейкой. Я добавил свойство к подклассу CollectionViewFlowLayout, который называется extendedCell, который отмечает ячейку, ниже которой я должен компенсировать все остальное.Подкласс UICollectionViewFlowLayout вызывает исчезновение ячейки

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 
{ 
    NSArray *attributes = [super layoutAttributesForElementsInRect:rect]; 
    if(!self.extendedCell) 
    { 
     return attributes; 
    } 
    else 
    { 
     return [self offsetCells:attributes]; 
    } 
} 

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewLayoutAttributes *attribute = [super layoutAttributesForItemAtIndexPath:indexPath]; 
    if(!self.extendedCell) 
    { 
     return attribute; 
    } 
    else 
    { 
     if(![attribute.indexPath isEqual:self.extendedCell] && 
      attribute.center.y >= [super layoutAttributesForItemAtIndexPath:self.extendedCell].center.y) 
     { 
      CGPoint newCenter = CGPointMake(attribute.center.x, 
              attribute.center.y + 180.f); 
      attribute.center = newCenter; 
     } 

     return attribute; 
    } 
} 

-(NSArray *)offsetCells:(NSArray *)layoutAttributes 
{ 
    for(UICollectionViewLayoutAttributes *attribute in layoutAttributes) 
    { 
     if(![attribute.indexPath isEqual:self.extendedCell] && 
      attribute.center.y >= [super layoutAttributesForItemAtIndexPath:self.extendedCell].center.y) 
     { 
      CGPoint newCenter = CGPointMake(attribute.center.x, 
              attribute.center.y + 180.0f); 
      attribute.center = newCenter; 
     } 
    } 

    return layoutAttributes; 
} 

Оказывается, что что-то плохое происходит по дороге, поскольку клетки внизу исчезают. У меня такое ощущение, что это связано с тем, что ячейки находятся вне размера контента UICollectionView, но настройка размера при создании макета не помогает. Любые идеи, как исправить это исчезновение?

ответ

1

OK Оказывается, я нашел ошибку. Кажется, что переопределение - (CGSize) collectionViewContentSize помогает. Если какие-либо ячейки лежат вне размера содержимого коллекции, они просто исчезают. Поскольку размер контента настроен на пользу до тех пор, пока не будут вызваны какие-либо атрибуты атрибутов макета, а ячейки не будут размещены вне него, просмотр коллекции просто избавится от них. Я думал, что размер контента основан на атрибутах ячеек после того, как они были установлены, это не так.

-(CGSize)collectionViewContentSize 
{ 
    if(self.extendedCell) 
    { 
     CGSize size = [super collectionViewContentSize]; 
     return CGSizeMake(size.width, size.height + 180); 
    } 
    else 
    { 
     return [super collectionViewContentSize]; 
    } 
} 
1

Решила его, разбив большие ячейки на второстепенные ячейки и связав их с видом. Очень хаки, но iOS7, надеюсь, поможет.

0

Проверить если Возвращаемый размер ячейки имеют один размер границы равен 0.

В моем случае исчезает причина была sizeForItem вернулся {320,0}

Why UICollectionView with UICollectionViewFlowLayout not show cells, but ask for size?

И для корректного отображения размера от наконечника (с использованием автоспуска) i использовать:

+ (CGSize)sizeForViewFromNib:(NSString *)nibName width:(CGFloat)width userData:(id)userData { 
     UIView *view = viewFromNib(nibName, nil); 
    [view configForUserData:userData]; 
    CGSize size = [view systemLayoutSizeFittingSize:CGSizeMake(width, SOME_MIN_SIZE) withHorizontalFittingPriority:UILayoutPriorityRequired verticalFittingPriority:UILayoutPriorityFittingSizeLevel]; 
    return CGSizeMake(width, size.height); 
} 
Смежные вопросы