這是我將如何實現的UICollectionViewFlowLayout
子類來實現你想要的。
class OffsetFlowLayout: UICollectionViewFlowLayout {
var verticalOffset: CGFloat = 0
override func prepare() {
super.prepare()
verticalOffset = 100 // Calculate offset here
}
override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
guard let attributes = super.layoutAttributesForItem(at: indexPath) else { return nil }
guard remainder(Double(indexPath.row), 2) != 0 else { return attributes }
// For each item in the right column, offset the y value of it's origin
attributes.frame.origin.y += verticalOffset
return attributes
}
}
正如你可以看到,在我們的實施layoutAttributesForItem
我們做的第一件事就是打電話超強並存儲返回值。然後我們檢查索引,如果我們在左欄,我們返回超級給了我們什麼,這將是「默認」值。
如果我們在右列中,我們修改屬性對象由我們想要的偏移量以移動單元的框架,然後返回一個。
注:我沒有測試過這一點。有一個機會UICollectionViewFlowLayout
使用以前的細胞佈局的下一個單元,在這種情況下,你只需要修改的第一個元素在右列,只是改變guard remainder(Double(indexPath.row), 2) != 0 else { return attributes }
到guard indexPath.row == 1 else { return attributes }
我會嘗試繼承默認流式佈局,重寫計算每個單元格框架的方法並修改返回值以獲得偏移量。 – EmilioPelaez
@EmilioPelaez我已經對流佈局進行了分類,但我不確定如何設置頂部偏移量來表示奇數單元格與偶數單元格不同。例如,它實際上只是第一個奇數單元,它必須低於0索引單元格,其他所有單元格都會有相同的偏移量......希望它有意義;) – CRE8IT
我可能沒有看到整個圖片,但是按照我看到的方式,右邊的所有單元格都會有一個奇怪的'indexPath.item'值,需要用'x'來抵消。我會繼承'UICollectionViewFlowLayout'並覆蓋'layoutAttributesForItemAtIndexPath'。如果'indexPath.item'是偶數,則返回super,否則,調用super並存儲結果,通過'x'將幀更新爲新的矩形偏移量並返回該更新的值。 – EmilioPelaez