2013-12-19 6 views
2

У нас есть UICollectionView, у которого есть прототип ячейки на раскадровке. Ячейка имеет в ней UILabellabel»), которая позиционируется без автовыброса.Изменение положения метки в UICollectionViewCell

Мы установили рамку этикетки условно в -collectionView:cellForItemAtIndexPath: с setFrame, как это:

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

    ... 

    if (self.isViewTypeList) {    
     [((CategoryCell *)cell).label setFrame:FRAME_RECT]; 
    } 

    ... 

    return cell; 
} 

Мы осмотрели его, и кажется, что в первую очередь это вызывает лейбла -setFrame: с раскадровке значения, когда это попадает на dequeing, тогда наш код следует, и это правильно устанавливает новые кадры. Другого вызова нет, кроме этого, но ярлык остается в исходном положении на экране.

Что случилось? Почему новый фрейм установлен неправильно? Что-то другое перевернуло? Нужно ли мне ретранслировать или обновлять его?

ответ

2

Пожалуйста, попробуйте следующие шаги. Это будет работать для Вы-

  • В раскадровке или XIB файл выбрать прототип ячейку
  • Выберите метку, для которой требуется изменить фрейм
  • Установите tag свойство его в Attributes Inspector (View Section), как установить tag = 101

После этого в вашем разделе кода это сделать -

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView 
        cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
//... 
    CategoryCell *cell; 
    cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Category" 
                forIndexPath:indexPath]; 
    //... 
    if (self.isViewTypeList) { 
     UILabel *lbl = (UILabel *)[cell viewWithTag:101]; 
     [lbl setFrame:FRAME_RECT]; 
    } 
    //... 
} 

Удачи!

0

попробовать:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView 
        cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //... 
    //instead of 
    //CategoryCell *cell; 
    //cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Category" 
    //             forIndexPath:indexPath]; 
    CategoryCell *cell = (CategoryCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"Category" 
                        forIndexPath:indexPath]; 
    //sure reuse-identifier is "Category"? 

    //... 
    if (self.isViewTypeList) { 
     //instead of 
     //[((CategoryCell *)cell).label setFrame:FRAME_RECT]; 
     [cell.label setFrame:FRAME_RECT]; 
    } 
    //... 
    return cell; 
} 

также пройти по этой ссылке и посмотреть, если вам не хватает некоторых важных шагов:
http://ashfurrow.com/blog/uicollectionview-example

+0

Настройка других свойств ячейки (например, цвет фона) отлично работает, поэтому это не может быть проблемой. – gklka

-1

Autolayout отменит ваши звонки setFrame:. Вы можете добавить некоторые ячейки в ячейке с ограничениями метки и изменить их для изменения фрейма.

+0

Автоотключение отсутствует, и никаких ограничений нет. – gklka

3

Снимите флажок Автовыброса из xib. Это может помочь сменить рамку.

Смежные вопросы