2014-11-13 15 views
10

machen Ich arbeite programmgesteuert (kein Storyboard) und habe Probleme, Layout.itemSize dynamisch für verschiedene Bildschirmgrößen zu machen. Ich bekomme diese Fehlermeldung:Wie UICollectionViewFlowLayout itemSize dynamisch für die Bildschirmgröße

mit dem folgenden Code in meiner Implementierungsdatei "UICollectionView muss mit einem Nicht-Null-Layout-Parameter initialisiert werden":

- (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 bekomme die Fehlermeldung, wenn ich "100.100" zum Beispiel für layout.itemSize verwende. Gibt es eine Möglichkeit, es dynamisch zu machen?

Ich bin neu in Objective-C, so würde jede Hilfe bei dem, was ich falsch mache, schätzen.

Antwort

14

Need den Fluss Delegatmethode verwenden:

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

    return cellSize; 
} 

Sie die Breite und Höhe Float-Werte angeben, was Sie wollen.

Zum Beispiel kann sagen, Ihre Collection vertikal ist und Sie eine kurze Kopfansicht, eine große mittlere Ansicht und eine kleine Fußzeile Ansicht, tun Sie könnten dann so etwas wie:

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

add folgende Delegatmethode zu Ihre Sammlung Ansicht

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

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

return image.size; 
} 

hier ein Link, die enter link description here

helfen
Verwandte Themen