Подтвердить что ты не робот

Исходное свойство ячейки прототипа iOS UICollectionView игнорируется

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

4b9b3361

Ответ 1

Размер ячейки в редакторе раскадровки - это только то, чтобы помочь вам создать ячейку. Поскольку каждая ячейка прототипа может быть другого размера, UICollectionView не знает, какой размер ячейки следует выбирать для всех ячеек. Вот почему вы устанавливаете фактический размер, который хотите использовать для своих ячеек отдельно. Вы можете сделать это в дизайнере, выбрав представление коллекции и установив его ширину и высоту размера ячейки в инспекторе размера в разделе "Размер коллекции".

Или вы можете переопределить следующий метод и вернуть объект 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>

Ответ 2

Если все ячейки имеют одинаковый размер, и вы можете установить itemSize на UICollectionViewFlowLayout

Пример:

((UICollectionViewFlowLayout *) self.collectionViewLayout).itemSize = CGSizeMake(100, 100);

Ответ 3

Swift, работающий на последней версии iOS.

(collectionView.collectionViewLayout as! UICollectionViewFlowLayout).itemSize = cellSize

У меня недостаточно очков для ответа Сэму, но ключ в том, что он не UICollectionViewLayout, а UICollectionViewFlowLayout.

Ответ 4

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

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

        if indexPath.row == 0 {
                // Set the size for cell no. 0
         }else if indexPath.row == 1 {
               // Set the size for cell no. 1
        }
    }

Надеюсь, это поможет. Благодарю!

Ответ 5

Если все ваши ячейки имеют одинаковый размер, вы должны просто установить свойства размера ячейки UICollectionView так же, как и свойства размера UICollectionViewCell.

Ответ 6

Вы можете установить размер UICollectionViewCell в свойствах UICollectionView.

В раскадровке выберите Collection View в Document Outline, а затем отредактируйте Cell Size в Size Inspector.

И вы должны изменить тип размера ячейки на значение по умолчанию, если оно выполнено.

Ответ 7

Используйте свой делегат по умолчанию.,.

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGSize mElementSize;
    mElementSize = CGSizeMake(SCREEN_WIDTH , SCREEN_HEIGHT *0.60);
    return mElementSize;
}