滚动时 Uicollectionview 不更新标题
Posted
技术标签:
【中文标题】滚动时 Uicollectionview 不更新标题【英文标题】:Uicollectionview is not updating header when scrolling 【发布时间】:2017-07-19 07:56:52 【问题描述】:CollectionView 具有标题和自定义布局。 当我单击单元格时,有两种方法正在工作。 1)didSelectItemAt 2) viewforsupplementaryelementofkind 我单击单元格并滚动到页面的开头。 无法动态检测 header 中的 detailPhotoStory 大小。
var headerHeight: CGFloat = 0.0
var headerView: DetailCollectionReusableView?
//viewForSupplementaryElementOfKind
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String,at indexPath: IndexPath) ->UICollectionReusableView
if kind == UICollectionElementKindSectionHeader
headerView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader,
withReuseIdentifier: "detailCollectionReusableView",
for: indexPath) as? DetailCollectionReusableView
headerView?.detailPhotoStory.text = PhotoItemArraySelected[indexPath.row].photoStory
headerView?.setNeedsLayout()
headerView?.layoutIfNeeded()
headerHeight = 380
headerHeight += (headerView?.detailPhotoStory.frame.height)!
return headerView!
return UICollectionReusableView()
//didSelectItemAt
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
headerView?.detailPhotoStory.text = PhotoItemArraySelected[0].photoStory
headerView?.setNeedsLayout()
headerView?.layoutIfNeeded()
headerHeight = 380
headerHeight += (headerView?.detailPhotoStory.frame.height)!
collectionView.reloadData()
collectionView.scrollToItem(at: IndexPath(row: 0, section: 0),
at: .top,
animated: true)
【问题讨论】:
请更具体地说明您要询问的内容。您指的是哪种标签尺寸? 使用这个referenceSizeForHeaderInSection,从你的内容中获取高度并返回你的高度 @karthikeyan 我使用了referenceSizeForHeaderInSection,但collectionview的标题没有改变。 【参考方案1】:您可以像这样创建字符串扩展,并使用它根据宽度和使用的字体获取标签高度。您可以使用返回的高度来分配单元格的高度。
extension String
func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat
let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil)
return boundingBox.height
来源是this ans。
【讨论】:
以上是关于滚动时 Uicollectionview 不更新标题的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView - 基于水平滚动更新数组 indexPath
向上滚动时保持 UICollectionView 中的滚动位置