2014-11-13 26 views
10

Programlı olarak (storyboard yok) çalışıyorum ve layout.itemSize farklı ekran boyutları için dinamik yapmada sorun yaşıyorum. Bu hata mesajını alıyorum:UICollectionViewFlowLayout öğesi nasıl boyutlandırılır? Ekran boyutu için dinamik boyut

benim uygulama dosyasında aşağıdaki kodu ile

"UICollectionView olmayan bir nil düzen parametresi ile başlatılmak zorundadır":

- (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' layout.itemSize için "100,100" kullanırsam hata mesajını al. Dinamik hale getirmenin bir yolu var mı?

Yeni Nesil-C için yeni yapıyorum, yanlış yaptığım şeylerle ilgili her türlü yardımı takdir ediyorum.

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

    return cellSize; 
} 

İstediğinizi için genişlik ve yükseklik float değerleri belirtin:

cevap

14

İhtiyaç akış temsilci yöntemi kullanmak. için temsilci yöntemi izlenerek

- (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

eklenti:

Örneğin, CollectionView dikey olduğunu ve kısa bir başlık görünümü, büyük bir orta görünümü ve küçük altbilgi görünümü, o zaman böyle bir şey yapabileceğini istiyorum diyelim koleksiyonunuzu burada görünümü

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

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

return image.size; 
} 

size enter link description here

yardımcı bir bağlantı
İlgili konular