2014-11-13 23 views
10

Tôi đang làm việc theo chương trình (không có bảng phân cảnh) và đang gặp sự cố khi tạo layout.itemSize động cho các kích thước màn hình khác nhau. Tôi nhận được thông báo lỗi này:Cách tạo mục UICollectionViewFlowLayoutSize động cho kích thước màn hình

"UICollectionView phải được khởi tạo với một tham số bố trí phi nil"

với đoạn mã sau vào tập tin thực thi của tôi:

- (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 nhận được thông báo lỗi nếu tôi sử dụng "100,100", ví dụ: layout.itemSize. Có cách nào để làm cho nó năng động mặc dù?

Tôi mới tham gia Objective-C vì vậy sẽ đánh giá cao bất kỳ trợ giúp nào về những gì tôi đang làm không chính xác.

Trả lời

14

Cần sử dụng phương pháp dòng chảy đại biểu:

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

    return cellSize; 
} 

Bạn chỉ rõ các giá trị float width và height để bất cứ điều gì bạn muốn.

Ví dụ, cho phép nói CollectionView của bạn là thẳng đứng và bạn muốn có một cái nhìn tiêu đề ngắn, một cái nhìn trung lớn và một cái nhìn chân nhỏ, sau đó bạn có thể làm một cái gì đó như:

- (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 sau phương pháp đại biểu đến bộ sưu tập của bạn xem

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

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

return image.size; 
} 

đây một liên kết mà giúp bạn enter link description here

Các vấn đề liên quan