2017-07-27 56 views
0

我使用UICollectionView與一個獨特的部分來拆分大視圖的邏輯。這個有一個HeaderView帶有圖片,我試着讓這個標題變得粘稠和有彈性(當你向下滾動標題變小,直到只是一個酒吧,堅持頂部,當你向上滾動並反彈時,標題來回到圖片和舒展)。UICollectionViewFlowLayout子類粘滯和伸展標題

我已閱讀並看很多教程,並設法使我自己的實現,但每一次,同樣的行爲發生了:

細胞不會再滾動,頭向下滑動。

而且每次我打電話:

collectionViewLayout.invalidateLayout() 

集合視圖滾動回頂部沒有動畫。

下面,只有有彈性的部分!

這裏我CustomCollectionViewFlowLayout代碼:

class CustomCollectionViewFlowLayout: UICollectionViewFlowLayout { 

    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { 
     guard let layoutAttributes = super.layoutAttributesForElements(in: rect), 
      let collectionView = collectionView else { 
      return nil 
     } 

     let offset = collectionView.contentOffset 
     if offset.y < 0 { 
      let deltaY = abs(offset.y) 
      for attributes in layoutAttributes { 
       if attributes.representedElementKind == UICollectionElementKindSectionHeader { 
        var frame = attributes.frame 
        frame.size.height = max(0, headerReferenceSize.height + deltaY) 
        frame.origin.y = frame.minY - deltaY 
        attributes.frame = frame 
       } 
      } 
     } 

     return layoutAttributes 
    } 

    override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool { 
     return true 
    } 

} 

在這裏,我如何與CollectionViewController鏈接它:

override func viewDidLoad() { 
    super.viewDidLoad() 

    if let flowLayout = collectionViewLayout as? PINPropertyDetailsCollectionViewFlowLayout { 
     let side = collectionView?.frame.width ?? 375 
     flowLayout.headerReferenceSize = CGSize(width: side, height: side) 
     flowLayout.estimatedItemSize = CGSize(width: side, height: 1) 
    } 
    collectionView?.contentInset = UIEdgeInsets(top: -20, left: 0, bottom: 0, right: 0) 
} 

我已經嘗試使用:

flowLayout.sectionHeadersPinToVisibleBounds = true 

以及與沒有更多的結果:什麼都沒有(細胞或頭)滾動了...

我使用的Xcode 9(測試4),其編碼的iOS 9 & 10.

感謝反饋:)

回答

0

我已經通過實施UICollectionViewDelegateFlowLayout和方法collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize解決它。

顯然,沒有固定項目大小的彈性效果是不可能的(直到現在我正在使用自動尺寸)