如何设置 UICollectionViewDelegateFlowLayout



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

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

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

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

根据前面的回答只是使用示例。真的不清楚,但我可以展示它是如何工作的:

@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

我的两分钱 macOS 莫哈韦 - 斯威夫特

(我在这里寻找NSCollectionView...我知道问题是关于UICollectionView

.

上述所有内容(指定委托也意味着单元格大小)对于macOS也是正确的。

注意:如果您编写:

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

方法:

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

将被召唤。

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

如果你想在 swift 中使用它就用这个

UICollectionViewDelegateFlowLayout 在你的控制器委托或为此扩展你的控制器之后添加这个

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return  CGSize(width: (collectionView.frame.size.width - 10) / 2, height: (collectionView.frame.size.width - 10) / 2)
}

相关内容

  • 没有找到相关文章

最新更新