0

我使用UICollectionView和相關的佈局時所面臨的一個挑戰。我試圖創建一個垂直UICollectionView有兩列,其中,在左,右列中的細胞出現在圖像定位:UICollectionView/FlowLayout中

enter image description here

我管理沒有問題創造了兩列但在我的佈局中找到正確的設置,以便讓右列偏移一個單元格高度的一半。請注意,所有的細胞都根據屏幕(減去間距)的寬度相同的計算出尺寸...

在我的數據陣列的每一個細胞都得到了一個位置索引,我可以這樣很容易找到一個細胞是否是位於右側或左側它基於基礎(奇/偶)

任何幫助表示讚賞樂意

+1

我會嘗試繼承默認流式佈局,重寫計算每個單元格框架的方法並修改返回值以獲得偏移量。 – EmilioPelaez

+0

@EmilioPelaez我已經對流佈局進行了分類,但我不確定如何設置頂部偏移量來表示奇數單元格與偶數單元格不同。例如,它實際上只是第一個奇數單元,它必須低於0索引單元格,其他所有單元格都會有相同的偏移量......希望它有意義;) – CRE8IT

+1

我可能沒有看到整個圖片,但是按照我看到的方式,右邊的所有單元格都會有一個奇怪的'indexPath.item'值,需要用'x'來抵消。我會繼承'UICollectionViewFlowLayout'並覆蓋'layoutAttributesForItemAtIndexPath'。如果'indexPath.item'是偶數,則返回super,否則,調用super並存儲結果,通過'x'將幀更新爲新的矩形偏移量並返回該更新的值。 – EmilioPelaez

回答

1

這是我將如何實現的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 }

+0

第一奇數項,工作就像一個魅力 –

+0

@AlexanderTkachenko蘋果加入到'UICollectionViewFlowLayout'屬性稱爲'sectionHeadersPinToVisibleBounds'是做到了這一點;) – EmilioPelaez

+1

哇,謝謝,它的真棒)肯定會試試這個時候,我們將刪除一個支持iOS 8! –

相關問題