iOS UICollectionView等分有1px縫隙

在使用UICollectionView開發(fā)無(wú)縫隙或者間隙為1px的頁(yè)面的時(shí)候應(yīng)該會(huì)遇到這樣的問(wèn)題(iPhone 5s 沒(méi)有問(wèn)題),明明是把屏幕四等分了,但為什么會(huì)有下圖的空白間隙呢?

等分有縫隙

再檢查一下代碼:

   UICollectionViewFlowLayout * flowLayout = [[UICollectionViewFlowLayout alloc] init];
   flowLayout.itemSize = CGSizeMake(Wi/4.0, 60);//算出來(lái)的寬度是93.75
   flowLayout.minimumLineSpacing = 0;
   flowLayout.minimumInteritemSpacing = 0;
   _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, Wi, He) collectionViewLayout:flowLayout];

發(fā)現(xiàn)代碼也是沒(méi)有問(wèn)題啊,可為什么會(huì)有這樣呢?(之前開發(fā)遇過(guò)這個(gè)問(wèn)題,但是被自己用"畫線填充"的方式取巧搞定了,沒(méi)想到這次有同事問(wèn)我這個(gè)問(wèn)題,為了能有一個(gè)通用的方法,還是要去找出原因)纫版。果然還是從簡(jiǎn)書找到解決方法UICollectionView 縫隙修復(fù),這里我結(jié)合我的理解做進(jìn)一步解釋。有哪位看官對(duì)此有更好的闡述希望不吝指導(dǎo)

  • 首先應(yīng)該了解一下[[UIScreen mainScrenn] scale]
iPhone 4 之前的設(shè)備為1.0
iPhone 4 ~ iPhone 6s (除plus外) 的為2.0
iPhone 6 plus 和 iPhone 6s plus 的為3.0
對(duì)于iPhone 6 Plus之前的手機(jī)痹雅,pt和px的比例是1:2,而iPhone 6 Plus出來(lái)之后,這一比例達(dá)到了1:3朴沿,

還是不太明白的話可以谷歌一下,這里有篇擴(kuò)展閱讀: 「像素」「渲染像素」以及「物理像素」是什么東西魏铅?它們有什么聯(lián)系?

造成縫隙的原因

iPhone6的屏幕像素(point,也叫邏輯像素)是375*667,物理像素為750*1334,等分4份的話每一個(gè)item的寬度是375/4=93.75,這里是沒(méi)有問(wèn)題的,問(wèn)題是屏幕能分的最小物理像素是1,而iPhone6的[[UIScreen mainScrenn] scale]是2.0,也就是說(shuō)1個(gè)屏幕像素(邏輯像素)對(duì)應(yīng)有2個(gè)物理像素,即0.5個(gè)屏幕像素對(duì)應(yīng)1個(gè)物理像素,而iPhone6四等分的寬度是93.75,根據(jù)前面的分析有0.25是不可再分的,這就是造成縫隙的原因千贯。
同理iPhone6 Plus的[[UIScreen mainScrenn] scale]是3.0,也就是說(shuō)1個(gè)屏幕像素(邏輯像素)對(duì)應(yīng)有3個(gè)物理像素,即0.333333個(gè)屏幕像素對(duì)應(yīng)1個(gè)物理像素,四等分之后是414/4=103.5,有0.16是不可再分的,也會(huì)有縫隙敦第。

解決辦法

思路:只要itemSize的width的小數(shù)點(diǎn)后的值等于1 / [UIScreen mainScreen].scale的值即可峰弹。

- (CGFloat)fixSlitWith:(CGRect)rect colCount:(CGFloat)colCount space:(CGFloat)space {
    CGFloat totalSpace = (colCount - 1) * space;//總共留出的距離
    CGFloat itemWidth = (rect.size.width - totalSpace) / colCount;// 按照真實(shí)屏幕算出的cell寬度 (iPhone6 375*667)93.75
    CGFloat fixValue = 1 / [UIScreen mainScreen].scale; //(1px=0.5pt,6Plus為3px=1pt)
    CGFloat realItemWidth = floor(itemWidth) + fixValue;//取整加fixValue  floor:如果參數(shù)是小數(shù),則求最大的整數(shù)但不大于本身.
    if (realItemWidth < itemWidth) {// 有可能原cell寬度小數(shù)點(diǎn)后一位大于0.5
        realItemWidth += fixValue;
    }
    CGFloat realWidth = colCount * realItemWidth + totalSpace;//算出屏幕等分后滿足1px=([UIScreen mainScreen].scale)pt實(shí)際的寬度,可能會(huì)超出屏幕,需要調(diào)整一下frame
    CGFloat pointX = (realWidth - rect.size.width) / 2; //偏移距離
    rect.origin.x = -pointX;//向左偏移
    rect.size.width = realWidth;
    _rect = rect;
    return realItemWidth; //每個(gè)cell的真實(shí)寬度
}

修復(fù)后的效果

修復(fù)后的效果
間隙為1的效果,不會(huì)出現(xiàn)有寬窄不一的情況了

OC版本demo下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芜果,一起剝皮案震驚了整個(gè)濱河市鞠呈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌右钾,老刑警劉巖蚁吝,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異舀射,居然都是意外死亡窘茁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門脆烟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)山林,“玉大人,你說(shuō)我怎么就攤上這事邢羔⊥漳ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵张抄,是天一觀的道長(zhǎng)砂蔽。 經(jīng)常有香客問(wèn)我洼怔,道長(zhǎng)署惯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任镣隶,我火速辦了婚禮极谊,結(jié)果婚禮上诡右,老公的妹妹穿的比我還像新娘。我一直安慰自己轻猖,他們只是感情好帆吻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咙边,像睡著了一般猜煮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上败许,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天王带,我揣著相機(jī)與錄音,去河邊找鬼市殷。 笑死愕撰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的醋寝。 我是一名探鬼主播搞挣,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼音羞!你這毒婦竟也來(lái)了囱桨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嗅绰,失蹤者是張志新(化名)和其女友劉穎蝇摸,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體办陷,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡貌夕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了民镜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啡专。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖制圈,靈堂內(nèi)的尸體忽然破棺而出们童,到底是詐尸還是另有隱情,我是刑警寧澤鲸鹦,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布慧库,位于F島的核電站,受9級(jí)特大地震影響馋嗜,放射性物質(zhì)發(fā)生泄漏齐板。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望甘磨。 院中可真熱鬧橡羞,春花似錦、人聲如沸济舆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)滋觉。三九已至签夭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間椎侠,已是汗流浹背覆致。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肺蔚,地道東北人煌妈。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宣羊,于是被迫代替她去往敵國(guó)和親璧诵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容