Я использую UICollectionView с двумя опытными ячейками. Опытные ячейки имеют различные ширины и содержат различные средства управления (представление изображения и веб-представление). Я определенно возвращаю корректную опытную ячейку для данного индекса (все ячейки отображают корректное содержание), но опытный размер ячейки проигнорирован, и размер объекта представления набора используется вместо этого. Это не похоже, я вручную устанавливаю размер. Какой смысл того, чтобы позволить опытной ячейке, которая будет измерена в раскадровке, если свойство просто проигнорировано, когда это на самом деле отображено?
Размер ячейки в редакторе раскадровки состоит в том, чтобы только помочь Вам разработать ячейку. Так как каждая опытная ячейка может быть различным размером, 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)
}
}
Быстро, работая на последнюю iOS.
(collectionView.collectionViewLayout as! UICollectionViewFlowLayout).itemSize = cellSize
у меня нет достаточного количества точек, чтобы ответить Sam, но ключ - то, что это не UICollectionViewLayout, но UICollectionViewFlowLayout.
Если все ячейки являются тем же размером, и можно установить itemSize
на UICollectionViewFlowLayout
Пример:
((UICollectionViewFlowLayout *) self.collectionViewLayout).itemSize = CGSizeMake(100, 100);
В Быстром можно назвать 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
}
}
я надеюсь, что это помогает.Спасибо!
Можно установить размер UICollectionViewCell
в UICollectionView
свойства.
В Раскадровке, Выбор Collection View
в эти Document Outline
, затем редактируют Ваш Cell Size
в Size Inspector
.
И необходимо изменить тип размера Ячейки для Установки по умолчанию, если это является Пользовательским.
Если все Ваши ячейки являются тем же размером, необходимо просто установить UICollectionView
свойства Размера ячейки к тому же как UICollectionViewCell
свойства размера.
Используйте его Делегата По умолчанию...
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
CGSize mElementSize;
mElementSize = CGSizeMake(SCREEN_WIDTH , SCREEN_HEIGHT *0.60);
return mElementSize;
}