collectionView 間距與設置不符合的原因

collectionView 間距與設置不符合的原因

0.223字數 130閱讀 505

今天做項目的時候做那個標籤 用collectionview 設置了間距, 發現間距不相等 我第一時間想到可能是設置sectionInset或者itemsize的問題,但是我去修改怎麼去設置都沒效果

就像這樣:

Snip20161223_2.png
Snip20161223_3.png

item之間的間隙不相等, 我當時有點納悶了 不知道什麼原因

後來看見這篇文章http://blog.csdn.net/u013604612/article/details/41450167解決了

解決辦法:

寫個類繼承UICollectionViewFlowLayout,在重寫的類裏面重寫

-(NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {
NSMutableArray<span class="token operator">*</span> attributes <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token keyword">super</span> layoutAttributesForElementsInRect<span class="token punctuation">:</span>rect<span class="token punctuation">]</span> mutableCopy<span class="token punctuation">]</span><span class="token punctuation">;</span>

<span class="token keyword">for</span> <span class="token punctuation">(</span>UICollectionViewLayoutAttributes <span class="token operator">*</span>attr <span class="token keyword">in</span> attributes<span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token function">NSLog</span><span class="token punctuation">(</span><span class="token string">@"%@"</span><span class="token punctuation">,</span> <span class="token function">NSStringFromCGRect</span><span class="token punctuation">(</span><span class="token punctuation">[</span>attr frame<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token comment">//從第二個循環到最後一個</span>
<span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token punctuation">[</span>attributes count<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token operator">++</span>i<span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token comment">//當前attributes</span>
    UICollectionViewLayoutAttributes <span class="token operator">*</span>currentLayoutAttributes <span class="token operator">=</span> attributes<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token comment">//上一個attributes</span>
    UICollectionViewLayoutAttributes <span class="token operator">*</span>prevLayoutAttributes <span class="token operator">=</span> attributes<span class="token punctuation">[</span>i <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token comment">//我們想設置的最大間距,可根據需要改</span>
    NSInteger maximumSpacing <span class="token operator">=</span> <span class="token number">5.0</span><span class="token punctuation">;</span>
    <span class="token comment">//前一個cell的最右邊</span>
    NSInteger origin <span class="token operator">=</span> <span class="token function">CGRectGetMaxX</span><span class="token punctuation">(</span>prevLayoutAttributes<span class="token punctuation">.</span>frame<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token comment">//如果當前一個cell的最右邊加上我們想要的間距加上當前cell的寬度依然在contentSize中,我們改變當前cell的原點位置</span>
    <span class="token comment">//不加這個判斷的後果是,UICollectionView只顯示一行,原因是下面所有cell的x值都被加到第一行最後一個元素的後面了</span>
    <span class="token keyword">if</span><span class="token punctuation">(</span>origin <span class="token operator">+</span> maximumSpacing <span class="token operator">+</span> currentLayoutAttributes<span class="token punctuation">.</span>frame<span class="token punctuation">.</span>size<span class="token punctuation">.</span>width <span class="token operator">&lt;</span> <span class="token keyword">self</span><span class="token punctuation">.</span>collectionViewContentSize<span class="token punctuation">.</span>width<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        CGRect frame <span class="token operator">=</span> currentLayoutAttributes<span class="token punctuation">.</span>frame<span class="token punctuation">;</span>
        frame<span class="token punctuation">.</span>origin<span class="token punctuation">.</span>x <span class="token operator">=</span> origin <span class="token operator">+</span> maximumSpacing<span class="token punctuation">;</span>
        currentLayoutAttributes<span class="token punctuation">.</span>frame <span class="token operator">=</span> frame<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

<span class="token keyword">return</span> attributes<span class="token punctuation">;</span>

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章