我使用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.
感謝反饋:)