簡體   English   中英

滾動UICollectionView時如何在頂部屏幕上自定義標題視圖?

[英]How to custom header view that sticky in top screen when scroll UICollectionView?

我有頭(頭: UICollectionReusableView )在我UICollectionView 標頭具有3個UIView( UIView1UIView2UIView3 )。 當我設置collectionLayout.sectionHeadersPinToVisibleBounds = true ,在滾動集合時標題將位於頂部。 而且我想當標題UICollectionViewUICollectionView頂部時,我將隱藏UIView1UIView2 我怎樣才能做到這一點?

UICollectionViewUIScrollView的子類。 這意味着您要為其分配一個委托,然后該委托可以偵聽scrollViewDidScroll(_ scrollView: UIScrollView)方法,該方法將在每次偏移量在集合視圖中更改時被調用。

在此事件上,您將需要獲取所有標頭視圖,我認為您可以通過在集合視圖上調用visibleSupplementaryViews並檢查其類類型來獲得標頭視圖。

如果接收到的視圖確實是您的標題,則需要檢查其框架與集合視圖的對比,並查看其位置是否在頂部。 為此,您可以將框架轉換為坐標:

func isHeader(headerView: UIView, onTopOfCollectionView collectionView: UICollectionView) -> Bool {
    guard let collectionSuperView = collectionView.superview else {
         return false // Collection view is not in view hierarchy. This will most likely never happen
    }
    let convertedFrame = headerView.convert(headerView.bounds, to: collectionSuperView) // Convert frame of the view to whatever is the superview of collection view
    return convertedFrame.origin.y <= collectionView.frame.origin.y // Compare frame origins
}

所以我想整個事情就像這樣:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    collectionView.visibleSupplementaryViews(<#My identifier here#>).forEach { view in
        if let header = view as? MyHeaderView {
            header.hideSecondaryViews = isHeader(headerView: header, onTopOfCollectionView: collectionView)
        }
    }
}

我希望這能使您走上正確的道路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM