UICollectionView 页眉和页脚视图

Posted

技术标签:

【中文标题】UICollectionView 页眉和页脚视图【英文标题】:UICollectionView Header and Footer View 【发布时间】:2015-10-17 05:51:20 【问题描述】:

您好,我想知道我们如何实现这一目标?

UITableView 我们可以简单地做

tableView.tableHeaderView = SomeView;

tableView.tableFooterView = SomeView;

但我想知道如何为UICollectionView 做同样的事情。

P.S.:不是节页眉和页脚

【问题讨论】:

Custom Footer view for UICollectionview in swift的可能重复 【参考方案1】:

UITableView 具有全局标题 tableHeaderViewtableFooterView,但 UICollectionView 没有全局标题,因此您必须使用节标题。

【讨论】:

【参考方案2】:

试试看……

ViewDidLoad 中的第一个注册类

registerClass(myFooterViewClass, forSupplementaryViewOfKind: UICollectionElementKindSectionFooter, withReuseIdentifier: "Footer")

那就用这个方法

override func collectionView(collectionView: UICollectionView,   viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView 

  switch kind 

    case UICollectionElementKindSectionHeader:

        let header = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "Header", forIndexPath: indexPath) as! UICollectionReusableView

        header = SomeView
        return header

    case UICollectionElementKindSectionFooter:
        let footer = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "Footer", forIndexPath: indexPath) as! UICollectionReusableView

        footer= SomeView 
        return footer

    default:

       print("anything")
    

希望对你有帮助……

【讨论】:

问题说Not Section Header and Footer,这个答案是关于SectionHeader/Footer的。【参考方案3】:

用户部分页眉和页脚并为此创建一个类,例如 headerFooter: UICollectionReusableView 然后在此类中编写您想要的代码,然后在 viewcontroller 中编写以下代码:

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView 
    let sectionView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "FooterView", for: indexPath) as! CollectionReusableView

    return sectionView

对于视图类:

class CollectionReusableView: UICollectionReusableView 

    @IBAction func ButtonClick(_ sender: Any) 
        print("Click 1st")
    
    @IBAction func ButtonClick2(_ sender: Any) 
        print("Click 2nd")
        

【讨论】:

【参考方案4】:

最简单的方法——设置collectionView.contentInset.top = height 并手动将视图添加到 collectionView:

let header = UIView(frame: CGRect(x: 0, y: -height, width: collectionView.frame.width, height: height))
// ... customise view, add subviews
collectionView.addSubview(header)

注意。您不能使用自动布局在集合视图中排列标题。所以使用好的旧手动布局。当 collectionView 改变框架时 - 你应该重置标题的宽度

【讨论】:

【参考方案5】:

我明白了。 很简单,就是这样。

        CGFloat headerHeight = 100;
        UIView *headerView = (
            UIView *view = [[UIView alloc] init];
            view.frame = CGRectMake(0, -headerHeight, collectionView.frame.size.width,headerHeight);
            view;
        );
        [collectionView addSubview:headerView];

        CGFloat footerHeight = 100;
        UIView *footerView = (
            UIView *view = [[UIView alloc] init];
            view.frame = CGRectMake(0, collectionView.frame.size.height, collectionView.frame.size.width, footerHeight);
            view;
        );

        self.footerView = footerView;
        [collectionView addSubview:footerView];
        collectionView.contentInset = UIEdgeInsetsMake(headerHeight, 0, footerHeight, 0);

并添加这个

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
       if (scrollView.contentSize.height > scrollView.frame.size.height) 
          CGRect frame = self.footerView.frame;
          frame.origin.y = scrollView.contentSize.height;
          self.footerView.frame = frame;
       

【讨论】:

以上是关于UICollectionView 页眉和页脚视图的主要内容,如果未能解决你的问题,请参考以下文章

android listviews:页眉和页脚视图

iOS UICollectionView 页眉和页脚位置

我们如何在滚动视图中设置过度滚动页眉和页脚?

Codeigniter 加载页眉和页脚一次

打印网页上的页眉和页脚如何设置

如何自动加载页眉和页脚视图?