опытное свойство размера ячейки iOS UICollectionView проигнорировано

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

62
задан 24 January 2013 в 05:01

7 ответов

Размер ячейки в редакторе раскадровки состоит в том, чтобы только помочь Вам разработать ячейку. Так как каждая опытная ячейка может быть различным размером, 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>

Swift

extension MyViewController : UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 100, height: 100)
    }
}
172
ответ дан 31 October 2019 в 13:10

Быстро, работая на последнюю iOS.

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

у меня нет достаточного количества точек, чтобы ответить Sam, но ключ - то, что это не UICollectionViewLayout, но UICollectionViewFlowLayout.

7
ответ дан 31 October 2019 в 13:10

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

Пример:

((UICollectionViewFlowLayout *) self.collectionViewLayout).itemSize = CGSizeMake(100, 100);
19
ответ дан 31 October 2019 в 13:10

В Быстром можно назвать 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
        }
    }

я надеюсь, что это помогает.Спасибо!

1
ответ дан 31 October 2019 в 13:10

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

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

И необходимо изменить тип размера Ячейки для Установки по умолчанию, если это является Пользовательским.

1
ответ дан 31 October 2019 в 13:10

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

0
ответ дан 31 October 2019 в 13:10

Используйте его Делегата По умолчанию...

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGSize mElementSize;
    mElementSize = CGSizeMake(SCREEN_WIDTH , SCREEN_HEIGHT *0.60);
    return mElementSize;
}   
0
ответ дан 31 October 2019 в 13:10

Другие вопросы по тегам:

Похожие вопросы: