CollectionView 方法 'referenceSizeForHeaderInSection' 抛出异常
CollectionView method 'referenceSizeForHeaderInSection' throws exception
我正在尝试为我的具有动态高度的 collectionView 创建 headers。但是当我实施 "referenceSizeForHeaderInSection" 时,应用程序崩溃并出现以下异常:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindSectionHeader with identifier FeedHeader - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
下面是 collectionView 的代码 header:
func numberOfSections(in collectionView: UICollectionView) -> Int {
return feedArray.count
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSize(width: collectionView.frame.size.width - 20 , height: 70)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsetsMake(10, 10, 10, 10);
}
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "FeedHeader", for: indexPath) as! FeedHeader
return header
}
FeedHeader class 是空的,因为我还没有向 header 添加任何标签:
class FeedHeader: UICollectionReusableView
{
}
当我删除 referenceSizeForHeaderInSection 实现时,该应用可以正常运行。
在故事板中也已将 header 链接到 class。
可能是什么问题?
提前致谢。
检查您是否已注册 forSupplementaryViewOfKind。
如果没有,则尝试在 viewDidLoad
中注册您的 supplementaryView
collectionView.register(nibName, forSupplementaryViewOfKind: "String", withReuseIdentifier: "Identifier")
确保您的重用标识符与 FeedHeader
相同
检查以下内容:
- select 您在 Stoaryboard 中的 header 视图
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
let headerView: TitleHeaderCollectionReusableView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "TitleHeaderCollectionReusableView", for: indexPath as IndexPath) as! TitleHeaderCollectionReusableView
return headerView
}
同时实现您喜欢的高度
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSize(width: collectionObj.frame.size.width, height: 50)
}
得到 issue.It 是因为 collectionView 将可重用视图作为页脚而不是 header。将其更改为 header,现在应用程序运行正常。感谢大家的帮助。
我正在尝试为我的具有动态高度的 collectionView 创建 headers。但是当我实施 "referenceSizeForHeaderInSection" 时,应用程序崩溃并出现以下异常:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindSectionHeader with identifier FeedHeader - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
下面是 collectionView 的代码 header:
func numberOfSections(in collectionView: UICollectionView) -> Int {
return feedArray.count
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSize(width: collectionView.frame.size.width - 20 , height: 70)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsetsMake(10, 10, 10, 10);
}
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "FeedHeader", for: indexPath) as! FeedHeader
return header
}
FeedHeader class 是空的,因为我还没有向 header 添加任何标签:
class FeedHeader: UICollectionReusableView
{
}
当我删除 referenceSizeForHeaderInSection 实现时,该应用可以正常运行。
在故事板中也已将 header 链接到 class。 可能是什么问题?
提前致谢。
检查您是否已注册 forSupplementaryViewOfKind。
如果没有,则尝试在 viewDidLoad
中注册您的 supplementaryViewcollectionView.register(nibName, forSupplementaryViewOfKind: "String", withReuseIdentifier: "Identifier")
确保您的重用标识符与 FeedHeader
检查以下内容:
- select 您在 Stoaryboard 中的 header 视图
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
let headerView: TitleHeaderCollectionReusableView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "TitleHeaderCollectionReusableView", for: indexPath as IndexPath) as! TitleHeaderCollectionReusableView
return headerView
}
同时实现您喜欢的高度
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSize(width: collectionObj.frame.size.width, height: 50)
}
得到 issue.It 是因为 collectionView 将可重用视图作为页脚而不是 header。将其更改为 header,现在应用程序运行正常。感谢大家的帮助。