Pertanyaan Bagaimana cara mengatur UICollectionViewDelegateFlowLayout?


UIViewController mempertahankan referensi ke UICollectionView. Pengontrol harus memodifikasi tata letak aliran built-in menggunakan UICollectionViewDelegateFlowLayout.

Ini sangat mudah untuk mengatur sumber data tampilan ke diri sendiri:

MyViewController.m

- (void)viewDidLoad
{
    self.collectionView.dataSource = self;
}

Tapi bagaimana cara mengatur controller untuk menjadi tata letak aliran delegasi dari tampilan?

- (void)viewDidLoad
{
    self.collectionView.dataSource= self;
    // self.collectionView.??? = self; 
}

Saya sudah mencoba:

- (void)viewDidLoad
{
    self.collectionView.dataSource= self;
    self.collectionView.collectionViewLayout = self; 
}

Tetapi saya mendapatkan kesalahan: "Penunjuk jenis tidak kompatibel menugaskan ...".

File header koleksi terlihat seperti ini:

MyViewController.h

@interface MyViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>

75
2017-10-17 00:08


asal


Jawaban:


Hanya self.collectionView.delegate = self;. Perhatikan itu UICollectionViewDelegateFlowLayout mewarisi dari UICollectionViewDelegate.

Aku akui itu bisa membuatmu lengah pada awalnya.

Oh dan ini hanya akan berfungsi jika self.collectionView.collectionViewLayout sebenarnya diatur ke tata letak aliran Anda. (atau disetel dengan initWithFrame:collectionViewLayout:)


191
2017-10-17 00:38



Menurut jawaban sebelumnya hanya contoh penggunaan. Benar-benar tidak jelas tetapi saya bisa menunjukkan cara kerjanya:

@interface PrettyViewController()<UICollectionViewDelegateFlowLayout, UICollectionViewDataSource>
    //some code
@end

@implementation PrettyViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.collectionView.delegate = self;//bingo! right here
}

#pragma mark - UICollectionViewDelegateFlowLayout

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section {
    return CGSizeMake([[UIScreen mainScreen] bounds].size.width, 20.0);
}


@end

9
2018-04-06 13:06