您不必編寫自定義佈局,可以真正地繼承UICollectionViewFlowLayout
並覆蓋確定幀定位的幾個關鍵方法,即layoutAttributesForElementsInRect:
/layoutAttributesForItemAtIndexPath:
在那裏你可以檢查部分並確定職位。
代碼本身可能會是比較簡單的,沿着線的東西:
if indexPath.section == 0 {
attributes.frame = CGRect(x: 0, y: 0, width: fullWidth, height: someHeight)
} else {
// Section 2 which is indexed at 1, set the frame
// to half the width and x to 0
if indexPath.section %2 != 0 {
attributes.frame = CGRect(x: 0, y: someYCounter, width: halfWidth, height, someHeight)
} else {
attributes.frame = CGRect(x: halfWidth, y: someYCounter, width: halfWidth, height, someHeight)
}
}
顯然,這是僞代碼,我沒有經歷過一個編譯器運行這一點,但基本步驟是:
- 具有確保集合視圖的存在,所以你可以定義以下變量的防護聲明:(後來鋪設時使用)
halfWidth
和fullWidth
- 讓您的
y
位置
- 檢查的部分指標,並適當地
位置去這是重寫prepare和計算佈局的陣列屬性的最佳方式運行計數器(並存儲爲一個實例變量)。然後在layoutAttributesForItemAtIndexPath:
之類的,只返回對象數組中的索引(或者,如果該指數是出於某種原因出界,返回super.layoutAttributesForItem(at: indexPath)
。
這是UICollectionViewFlowLayout
美麗,最繁重的任務是爲你完成,你可以繼承幾個簡單的方法來獲得所需的行爲。另一種選擇是全面的自定義佈局,在我看來,除非您有一些瘋狂的行爲,否則您應該與設計師就他們所做的複雜性進行對話,這是很少有理由的。
那麼你可以簡單地使用兩個不同的滾動視圖。但這樣做很糟糕,因爲它避免了一個更清晰的解決方案,它將「正確使用自定義佈局和自定義單元格」 –
您的需求似乎與本文檔第18頁上給出的自定義佈局示例相匹配。 https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/CollectionViewPGforIOS/CollectionViewPGforIOS.pdf –
太棒了!所以我錯了,假設一個自定義的佈局不能完全做到這一點!謝謝 – maxlxb