如何设置UICollectionViewDelegateFlowLayout?


108

UIViewController维护对UICollectionView的引用。控制器应使用UICollectionViewDelegateFlowLayout修改内置流布局。

将视图的数据源设置为self很容易:

MyViewController.m

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

但是,如何将控制器设置为视图的委托流布局?

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

我试过了:

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

但是我得到了错误:“分配不兼容的指针类型...”。

集合头文件如下所示:

MyViewController.h

@interface MyViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>

Answers:


265

只是self.collectionView.delegate = self;。请注意,该UICollectionViewDelegateFlowLayout继承自UICollectionViewDelegate

我承认它一开始让我措手不及。

哦,这仅在self.collectionView.collectionViewLayout实际设置为流布局时才有效。(或设置为initWithFrame:collectionViewLayout:


1
@JohnEstropia,很抱歉,但是如何在代码中初始化自定义布局?我看到带有情节提要的示例,但没有代码本身。我该怎么办?
gaussblurinc 2014年

3
也许,self.collectionViewLayout = UICollectionViewFlowLayout()self.collectionViewLayout = [[UICollectionViewFlowLayout alloc]init]
大师中岛

14

根据先前的答案只是使用示例。确实不清楚,但是我可以展示它是如何工作的:

@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

1

我为macOS Mojave支付的两分钱-Swift

(我曾在这里寻找NSCollectionView...我确实知道问题是关于UICollectionView..的)

上述所有内容(指定代表也暗示单元大小)对于macOS也是正确的。

注意:如果您写:

class MyViewController:
    NSCollectionViewDelegate,
    NSCollectionViewDataSource,
    **NSCollectionViewDelegateFlowLayout** 
{

方法:

func collectionView(_ collectionView: NSCollectionView, 
                      layout collectionViewLayout: NSCollectionViewLayout, 
               sizeForItemAt indexPath: IndexPath) -> NSSize

被称为。

如果删除,则不会调用任何委托方法。(因为类不遵守协议)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.