2014-11-13 11 views
10

Pracuję programowo (bez storyboardu) i mam problem z dostosowaniem layout.itemSize do różnych rozmiarów ekranu. I ten komunikat o błędzie:Jak utworzyć element UICollectionViewFlowLayout itemSize dynamic dla rozmiaru ekranu

"UICollectionView muszą być zainicjowane z parametrem układu non-Nil"

z następującego kodu w moim pliku realizacji:

- (instancetype)init 
{ 
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; 

    CGSize size = self.collectionView.bounds.size; 

    layout.itemSize = CGSizeMake(size.width, size.height); 

    [layout setScrollDirection:UICollectionViewScrollDirectionVertical]; 

    layout.minimumLineSpacing = 100.0; 

    layout.headerReferenceSize = CGSizeMake(0.0, 50.0); 

    return (self = [super initWithCollectionViewLayout:layout]); 
} 

I don” t uzyskać komunikat o błędzie, jeśli używam "100,100" na przykład dla layout.itemSize. Czy jest jakiś sposób, aby uczynić go dynamicznym?

Jestem nowy w Objective-C, więc doceniam każdą pomoc dotyczącą tego, co robię nieprawidłowo.

Odpowiedz

14

trzeba użyć metody delegata przepływu:

- (CGSize)collectionView:(UICollectionView *)collectionView 
        layout:(UICollectionViewLayout *)collectionViewLayout 
    sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGSize cellSize = CGSizeMake(width, height); 

    return cellSize; 
} 

określić wartości pływaka szerokość i wysokość, aby cokolwiek chcesz.

Na przykład, powiedzmy, że twój CollectionView jest pionowa i chcesz krótki widok nagłówka, duży środkowy widok i mały widok stopki, a następnie można zrobić coś takiego:

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

    cellSize.width = self.view.bounds.size.width; 

    if(indexPath.row == 0) 
    { 
     // header view height 
     cellSize.height = 100; 
    } 
    else if(indexPath.row == 1) 
    { 
     // body view height 
     cellSize.height = 500; 
    } 
    else 
    { 
     // assuming number of items is 3, then footer view is last view 
     // footer view height 
     cellSize.height = 100; 
    } 

    return cellSize; 
} 
1

Dodaj następujący sposób delegować kolekcja widok

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
UIImage *image; 
long row = [indexPath row]; 

image = [UIImage imageNamed:_carImages[row]]; 

return image.size; 
} 

tutaj link, który pomoże Ci enter link description here