无法将页脚添加到集合视图
Posted
技术标签:
【中文标题】无法将页脚添加到集合视图【英文标题】:Unable to add footer to Collection View 【发布时间】:2018-10-16 12:35:13 【问题描述】:我只需要一个高度为 50 且背景颜色为黑色的页脚。而已。暂时忘记下面的实现,然后告诉我你将如何实现它。
我正在使用以下内容:
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
let view = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionFooter, withReuseIdentifier: "FooterView", for: indexPath as IndexPath)
// configure footer view
return view
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize
return CGSize(width: 375, height: 100)
但是,没有页脚附加到集合视图。我无法理解为什么这不起作用以及我应该如何纠正这个问题。请帮我纠正这个问题。
【问题讨论】:
您能附上尺寸检查器的屏幕截图,以及页脚视图和页眉视图的高度吗? 你设置delegate
的UICollectionView
了吗?
@hardikparmar,请检查编辑。 @dani,是的
这是自定义页脚吗?意思是,您是否为 UICollectionReusableView
使用自定义类?
@Dani,没有。请帮我放置一个高度为 50 且背景颜色为黑色的空页脚。就是这样。谢谢。
【参考方案1】:
这是我的方式。我对此进行了测试,它可以工作。
class ViewController: UIViewController, UICollectionViewDataSource
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad()
super.viewDidLoad()
collectionView.dataSource = self
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
let view = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionFooter, withReuseIdentifier: "Footer", for: indexPath)
view.backgroundColor = .red
return view
【讨论】:
我得到:类型“UICollectionView”没有成员“elementKindSectionFooter”。我正在使用 Swift 4.1 我正在使用 Swift 4.2 并且UICollectionElementKindSectionFooter
已重命名。但是使用UICollectionElementKindSectionFooter
看看是否可行【参考方案2】:
我是如何做到的:
1) 创建自定义页脚类:
import UIKit
class BlackFooterView: UICollectionReusableView
override init(frame: CGRect)
super.init(frame: frame)
backgroundColor = .black
required init?(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
2) 在UICollectionView
注册Footer类并设置参考大小(通常在需要ViewController
的viewDidLoad
方法中:
override func viewDidLoad()
super.viewDidLoad()
/// Class registration
self.collectionView!.register(BlackFooterView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionFooter, withReuseIdentifier: footerReuseIdentifier)
/// Reference size
(self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout).footerReferenceSize = CGSize(width: collectionView.bounds.width, height: 50)
3) 实现委托方法:
override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
if kind == UICollectionView.elementKindSectionFooter
return collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: footerReuseIdentifier, for: indexPath)
/// Normally should never get here
return UICollectionReusableView()
4) 瞧:
Swift 4.2 中提供的示例
注意:
-
不包括细胞生成代码。
我使用
UICollectionViewController
类作为示例,这就是为什么delegate
方法从override
开始
您还可以从 XIB 创建页脚。在这种情况下,应使用registerNib:forSupplementaryViewOfKind:withReuseIdentifier: 方法进行注册。
【讨论】:
【参考方案3】:override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
if (kind == UICollectionElementKindSectionFooter)
let footerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "CartFooterCollectionReusableView", for: indexPath)
// Customize footerView here
return footerView
else if (kind == UICollectionElementKindSectionHeader)
let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "CartHeaderCollectionReusableView", for: indexPath)
// Customize headerView here
return headerView
fatalError()
【讨论】:
请提供更多信息并使用代码括号。以上是关于无法将页脚添加到集合视图的主要内容,如果未能解决你的问题,请参考以下文章
如何将页脚添加到 NavigationView - Android 支持设计库?