2014-01-04 3 views
10

Я пытаюсь просто добавить UIView в UICollectionViewCell, который занимает весь фрейм ячейки. В коде, который у меня есть, теперь отображается только одна ячейка в верхнем левом углу (я подозреваю, что каждая ячейка получает слой поверх друг друга). Как я могу это сделать?Добавление subview в UICollectionViewCell, который занимает весь фрейм ячейки

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

#pragma mark - Collection view data source 

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { 
    return 1; 
} 

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 
    return 6; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; 

    UIView *menuItem = [[UIView alloc] init]; 
    menuItem.frame = cell.frame; 
    menuItem.backgroundColor = [UIColor greenColor]; 
    [cell addSubview:menuItem]; 

    return cell; 
} 

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath; { 
    return CGSizeMake(60, 60); 
} 
+0

Вы можете изменить menuItem.frame = cell.frame to menuItem.frame = cell.bounds – kkocabiyik

ответ

10

Вы должны будете использовать bounds, не frame. Если вы не знаете разницу между двумя или почему это имеет значение, вы должны прочитать об этом и освоиться с ним, прежде чем идти дальше:

menuItem.frame = cell.bounds; 

Вы также хотите установить маску автоматического изменения, так как клетка не будет первоначально в правильном размере:

menuItem.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

И, на самом деле, вы должны добавлять это contentView собственности клетки:

[cell.contentView addSubview:menuItem]; 
menuItem.frame = cell.contentView.bounds; 

Тем не менее, если йо u планируйте добавить много подзонов к menuItem, я рекомендую подклассифицировать UICollectionViewCell вместо того, чтобы пытаться построить его в вашем методе cellForItemAtIndexPath:. Будет легче контролировать, если макет и настройка инкапсулированы в другой класс, и вы можете реагировать на изменения высоты/ширины, переопределяя layoutSubviews.

+0

Хорошо, может быть, вы правы. Спасибо за всю помощь, я думаю, что я просто сделаю это, подклассифицируя UICollectionViewCell, как вы предложили. – DBoyer

+0

Отличный совет с авторезистирующей маской ... Я пытался решить эту проблему (изначально неправильный размер) для LONG, хотя сейчас ... спасибо! – shokaveli

0

В этом случае вы должны взаимодействовать только с ячейкой contentView.

UIView *menuItem = [UIView new]; 
menuItem.frame = cell.contentView.bounds; 
menuItem.backgroundColor = [UIColor greenColor]; 
[cell.contentView addSubview:menuItem]; 
Смежные вопросы