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>

}

猜你喜欢

转载自blog.csdn.net/Draven__/article/details/105072177
今日推荐