2013-02-26 61 views
3

我最近開始使用UICollectionView,並且對UICollectionViewFlowLayout有點困惑。看起來,收集視圖中每個單元格的框架在每個項目之間具有相等的空間。這會導致某些單元格的幀具有分數位置,這會導致模糊的標籤和未對齊的圖像像素等等。UICollectionViewFlowLayout不使用積分框架

我很驚訝地發現,雖然對堆棧溢出沒有任何問題,但這讓我覺得我做錯了什麼。我創建了演示該問題很簡單的測試項目:

https://github.com/rmaz/BlurryCollectionView

這真的是標準的行爲?在我看來,這使得流佈局在沒有子類的情況下基本上不可用。或者我錯過了什麼?

+0

我得到了同樣的錯誤。我的解決方案是使用sectionInset,它將使單元框架對齊。 – 2013-03-06 00:43:03

+0

如果你有一個不需要旋轉的佈局,這個方法就行得通,但如果你的單元必須遵循嚴格的設計,那麼不可能對兩個方向使用相同的插入。爲什麼我們甚至要像這樣對抗佈局?如果你問我,奇怪的實現。 – Tark 2013-03-06 17:27:46

+0

您必須在「viewWillLayoutSubviews」中爲不同的方向設置sectionInset。我發現UICollectionView並不像看起來那麼有效率,但現在切換到其他替代品已經太遲了。 – 2013-03-07 21:21:12

回答

8

解決辦法:子類UICollectionViewFlowLayout,覆蓋UICollectionViewLayout-layoutAttributesForElementsInRect:和每一個佈局屬性使框架組成:

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 
{ 
    NSArray *allLayoutAttributes = [super layoutAttributesForElementsInRect:rect]; 
    for (UICollectionViewLayoutAttributes *layoutAttributes in allLayoutAttributes) { 
     layoutAttributes.frame = CGRectIntegral(layoutAttributes.frame); 
    } 
    return allLayoutAttributes; 
} 

注:iOS的7 UICollectionViewFlowLayout已被固定,始終使用整體框架爲它的細胞的幀。我建議保留iOS 6.x的修復程序,但有條件地棄用iOS 7或更新的修補程序。

最佳, 拉斐爾

+0

這不是一個理想的解決方法,因爲它會導致單元格之間的間距不均勻。 – Tark 2013-03-01 18:11:52

+2

如果您想要將不可分割的整數單元放在沒有休息的位置,您將按照定義具有不均勻的間距。 – 2013-03-06 21:00:02

+0

這是真的,但我認爲你可以通過增加右側部分插入來獲得視覺上更好的結果,直到你在一行中的每個項目之間均勻間隔。 – Tark 2013-03-07 21:37:21