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
具有全局标题 tableHeaderView
和 tableFooterView
,但 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 页眉和页脚视图的主要内容,如果未能解决你的问题,请参考以下文章