Коллекционные ячейки разного размера

http://postimg.org/image/6bws3catp/

Как вы можете видеть на изображении, мне нужно что-то, что дает мне возможность изменять размер ячейки в зависимости от длины содержащегося в ней текста.

Я пытался сделать это с помощью UICollectionview, но ячейки всегда имеют одинаковый размер, и если я попытаюсь изменить размер, играя с параметрами frame.size и location, прокрутка сходит с ума.

Возможно, UICollectionView - не лучший выбор...

Спасибо большое

РЕДАКТИРОВАТЬ:

Благодаря вашим ответам мои ячейки могут динамически изменять свой размер, но поля ведут себя не так, как я ожидал.

Поля ячеек всегда зависят от самой большой ячейки той же строки

http://postimg.org/image/3scthf9rv/

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section{
return 6;
}

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

Еще раз спасибо за вашу помощь


person Andoxko    schedule 25.11.2013    source источник


Ответы (2)


  1. Вы можете проверить https://github.com/bryceredd/RFQuiltLayout . Похоже, что-то, что вы можете использовать для этого ...

  2. вы можете переопределить следующий метод и вернуть объект CGSize, указывающий размер, который вы хотите использовать для каждой ячейки. Используя этот метод, вы можете фактически иметь каждую ячейку разного размера:

    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
    

Пример:

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

Ваш контроллер представления должен быть делегатом UICollectionViewDelegateFlowLayout, чтобы этот метод вызывался. Поэтому не забудьте добавить это объявление делегата в файл .h вашего контроллера представления, например:

@interface MyViewController () <UICollectionViewDelegateFlowLayout>
person Pradhyuman sinh    schedule 25.11.2013
comment
Большое спасибо! Не могли бы вы помочь мне с новой проблемой маржи? - person Andoxko; 26.11.2013
comment
@AndoniMuruamendiaraz, в чем твоя проблема? - person Pradhyuman sinh; 26.11.2013
comment
Я отредактировал вопрос, чтобы лучше объяснить его, или лучше создать новый вопрос? Извините, я здесь новенький :) - person Andoxko; 26.11.2013
comment
@AndoniMuruamendiaraz хорошо, я даю вам ссылку на пример кода: github.com/chiahsien/CHTCollectionViewWaterfallLayout - person Pradhyuman sinh; 26.11.2013
comment
Наконец-то я сделал с вами вашу первую рекомендацию (RFQuiltLayout). Спасибо большое!! Вы спасатель!! - person Andoxko; 26.11.2013
comment
Извините, но у меня недостаточно репутации, чтобы сделать это. - person Andoxko; 09.12.2013
comment
@AndoniMuruamendiaraz хорошо, без проблем - person Pradhyuman sinh; 09.12.2013

UICollectionView правильный выбор. Вам просто нужно настроить атрибуты макета потока.

Прочитайте Настройка атрибутов макета потока

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

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
  // In this method you can calculate the size of the string for each cell
  UIFont *font = // font to create the text for each cell
  NSString *string = // text string for each cell
  CGSize size = [string sizeWithFont];
  return size;
}
person Puneet Sharma    schedule 25.11.2013
comment
Большое спасибо!! Ваша помощь была очень полезной. Не могли бы вы помочь мне с маржой? - person Andoxko; 26.11.2013