在Swift中为UICollectionview创建自定义底部视图

11

我正在用Swift重新编写一个原来用Objective-C编写的应用程序,并且决定在我的情况下用集合视图比表格视图更好。所以,我已经按照自己的想法设置好了收藏视图,现在需要向我的收藏视图添加页脚。

在Objective-C中,这对我来说非常容易,我只需创建一个UIView,向其中添加对象,然后像这样将其添加到我的表格视图中。

self.videoTable.tableFooterView = footerView;

现在我正在尝试在我的集合视图中找到类似的解决方案,但是到目前为止我没有找到任何帮助。

是否有一个简单的.collectionviewFooterView或其他可以将我的UIView添加到其中的东西?

编辑 如果有帮助创建答案,我在这里找到了类似的想法。

编辑

我一直在考虑如何实现这一点,所以现在我的想法是使用以下代码将页脚视图添加到集合视图的末尾:

var collectionHeight = self.collectionView.collectionViewLayout.collectionViewContentSize().height

footerView.frame = CGRectMake(0, collectionHeight, screenSize.width, 76)

我唯一遇到的问题是需要在collectionView的contentView中添加更多空间,但我尝试了很多方法都没有成功。

我的解决方案

我使用了一个不太美观但实用的方法解决了这个问题,就是简单地向UICollectionView添加UIView。

footerView.frame = CGRectMake(0, collectionHeight - 50, screenSize.width, 50)
self.collectionView.addSubview(footerView)

使用此代码设置布局插图:

alLayout.contentInsets = UIEdgeInsetsMake(2, 2, 52, 2)

你能提供一个示例代码吗?另外,你能提供上述代码的设置位置吗?! - Learn2Code
1个回答

15

与表格视图不同,集合视图处理页眉和页脚的方式有所不同。您需要:

  1. 使用以下方法注册页脚视图类:

    registerClass(myFooterViewClass, forSupplementaryViewOfKind: UICollectionElementKindSectionFooter, withReuseIdentifier: "myFooterView")
    
  2. 要么在你的集合视图布局中设置headerReferenceSize,要么在你的delegate中实现collectionView:layout:referenceSizeForHeaderInSection:

  3. 从你的dataSource中的以下方法返回页脚视图:

  4. func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
        let view = collectionView.dequeueReusableSupplementaryViewOfKind(UICollectionElementKindSectionFooter, withReuseIdentifier: "myFooterView", forIndexPath: indexPath)
        // configure footer view
        return view
    }
    

我想这就是全部了!


1
我使用自定义类来布局,我认为它没有页脚。 - inVINCEable
没错 - 这只适用于您的布局派生自“UICollectionViewFlowLayout”。 - Nate Cook
给你打钩,因为这是一个好答案,在大多数情况下都能正常工作。 - inVINCEable
1
我必须在myFooterViewClass的末尾使用.self,就像这样:collectionView.register(MyFooterViewClass.self, forSupplementaryViewOfKind: UICollectionElementKindSectionFooter, withReuseIdentifier: "myFooterView")。 - Daniel Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接