【问题标题】:How to set UICollectionViewDelegateFlowLayout?如何设置 UICollectionViewDelegateFlowLayout?
【发布时间】:2012-10-07 04:15:36
【问题描述】:

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>

【问题讨论】:

    标签: ios uicollectionview flowlayout


    【解决方案1】:

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

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

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

    【讨论】:

    • @JohnEstropia,对不起,如何在代码中初始化自定义布局?我看到了带有故事板的示例,但没有看到代码本身。我该怎么办?
    • 可能,self.collectionViewLayout = UICollectionViewFlowLayout()self.collectionViewLayout = [[UICollectionViewFlowLayout alloc]init]
    【解决方案2】:

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

    @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
    

    【讨论】:

      【解决方案3】:

      ma​​cOS Mojave - Swift

      我的两分钱

      (我在这里搜索NSCollectionView...我知道问题是关于UICollectionView..)

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

      注意:如果你写:

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

      方法:

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

      被调用。

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

        • 不要给你的collectionView的datasoruce和delegate
        猜你喜欢
        • 2020-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多