解決Collection 間隙問(wèn)題

UICollectionView解決item之間的間隙問(wèn)題

在項(xiàng)目中需要使用網(wǎng)格組件來(lái)顯示列表信息,因此封裝了一個(gè)iOS的網(wǎng)格組件GridView,demo地址: GitHub

在實(shí)現(xiàn)過(guò)程中發(fā)現(xiàn)一個(gè)問(wèn)題,在iPhone8中,UICollectionView 展示的item之間總有間隙,即使設(shè)置了item等寬,也設(shè)置了UICollectionViewFlowLayout 的 minimumInteritemSpacing 為 0,都不管用,于是Google一番,發(fā)現(xiàn)問(wèn)題普遍存在,做了以下問(wèn)題說(shuō)明和解決辦法

參考文章:UICollectionView 縫隙修復(fù)

簡(jiǎn)要說(shuō)明問(wèn)題產(chǎn)生原因:

1、iPhone中屏幕的 邏輯像素(pt)和 物理像素(px)的對(duì)應(yīng)關(guān)系,在iPhone6s plus(包含)之后都是一個(gè)pt對(duì)應(yīng)3個(gè)px,iPhone4 ~iPhone6s都是一個(gè)pt對(duì)應(yīng)3個(gè)px,從 [[UIScreen mainScrenn] scale] 可以得出對(duì)應(yīng)比例。

2、舉例說(shuō)明:當(dāng)在iPhone8中 UICollectionView 顯示4個(gè)等寬的item時(shí),item的 width 為 375.0/4 = 93.75 (375為iPhone8 邏輯像素寬度), 按照1個(gè)pt由3個(gè)px來(lái)渲染的邏輯,最后的 0.75 只有 0.66 的部分由2個(gè)px渲染,剩下的 0.09沒(méi)法渲染,因此產(chǎn)生了臨近的 1px空白間隙。

解決問(wèn)題:

解決方式與參考文章的做法不同,這里是主動(dòng)規(guī)避。

既然有1px空白間隙,那就避免產(chǎn)生這個(gè)間隙,在計(jì)算 itemSize 的時(shí)候,假設(shè)item等寬為 width,item 的個(gè)數(shù)為 num,除了第一個(gè)item,其他item的寬度都取值 floor(width) ,然后第一個(gè)item 寬度為 CGRectGetWidth(collectionView.bounds) - floor(width) * num ; 這樣就可以避免出現(xiàn)帶小數(shù)寬度,從而沒(méi)了那個(gè)1px空白。

貼一下計(jì)算代碼:

在方法

-(CGSize)collectionView:(UICollectionView )collectionView layout:(UICollectionViewLayout )collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 中寫(xiě)入:

NSInteger num = 4;

CGFloat width = CGRectGetWidth(collectionView.bounds)/num;

CGFloat height = 100.0;

if(indexPath.row == 0){

? ? //第一列的width比其他列稍大一些,消除item之間的間隙

? ? CGFloat realWidth = CGRectGetWidth(collectionView.bounds) - floor(width) * (num - 1);

? ? return CGSizeMake(realWidth, height);

}else{

? ? return CGSizeMake(floor(width), height);

}

原文鏈接:https://blog.csdn.net/ayuapp/article/details/80360745

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容