問題:UICollectionView Cell之間存在縫隙

原因

  • UICollectionViewCell的size不為整數(shù)時,UICollectionViewFlowLayout在布局計算時,可能會調整Cell的frame.origin,使Cell按照最小物理像素(渲染像素)對齊,導致出現(xiàn)縫隙。

  • 假設當前Cell的frame.origin.y=100.8(邏輯像素),轉化成渲染像素(參考備注)是201.6(iPhone 8)或302.4(iPhone 8 Plus)名秀。為了按渲染像素對齊,UICollectionViewFlowLayout應該會四舍五入取整藕溅,取整后為202(iPhone 8)或302(iPhone 8 Plus)匕得,轉成邏輯像素101(iPhone 8)或100.667(iPhone 8 Plus),導致在iphone8上就會出現(xiàn)0.2像素的縫隙巾表。

  • 分辨率相關的汁掠,可以百度下。

簡單解決辦法:

  • 主動把Cell的size取整集币,不丟給UICollectionViewFlowLayout處理考阱。
- (CGSize)fixedCollectionCellSize:(CGSize)size {
    CGFloat scale = [UIScreen mainScreen].scale;
    return CGSizeMake(round(scale * size.width) / scale, round(scale * size.height) / scale);
}

Demo實驗

  • UITableView,Cell高度設置成100.12鞠苟,沒有強制被按渲染像素對齊乞榨,如 99.62 1802.16 1902.28
(lldb) po [0x7fb85b83b800 recursiveDescription]
<UITableView: 0x7fb85b83b800; frame = (0 0; 375 667); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x6000004451f0>; layer = <CALayer: 0x60000022dc40>; contentOffset: {0, 1272.5}; contentSize: {375, 2002.4000549316406}; adjustedContentInset: {20, 0, 0, 0}>
   | <UITableViewCell: 0x7fb85c862a00; frame = (0 1902.28; 375 100.12); autoresize = W; layer = <CALayer: 0x6040004265a0>>
   |    | <UITableViewCellContentView: 0x7fb85b70fea0; frame = (0 0; 375 99.62); gestureRecognizers = <NSArray: 0x6040002426a0>; layer = <CALayer: 0x604000425e80>>
   |    |    | <UIImageView: 0x7fb85b41a330; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <CALayer: 0x6000008215c0>>
   |    | <_UITableViewCellSeparatorView: 0x7fb85b710820; frame = (15 99.62; 360 0.5); layer = <CALayer: 0x604000427640>>
   | <UITableViewCell: 0x7fb85c862400; frame = (0 1802.16; 375 100.12); autoresize = W; layer = <CALayer: 0x6040002212e0>>
  • iPhone Plus 8,UICollectionView当娱,Cell高度設置成100.12吃既,強制被按渲染像素對齊了,frame.origin.y被調整后的值趾访,如200.333 500.667 600.667
   | <UICollectionViewCell: 0x7fdd9f71f010; frame = (0 200.333; 414 100.12); hidden = YES; layer = <CALayer: 0x60000023d800>>
   | <UICollectionViewCell: 0x7fdd9f71f470; frame = (0 300.333; 414 100.12); layer = <CALayer: 0x60000023e380>>
   | <UICollectionViewCell: 0x7fdd9f72aa30; frame = (0 400.333; 414 100.12); layer = <CALayer: 0x60000023f4e0>>
   | <UICollectionViewCell: 0x7fdd9f72ae90; frame = (0 500.667; 414 100.12); layer = <CALayer: 0x60000023f9a0>>
   | <UICollectionViewCell: 0x7fdd9f72b510; frame = (0 600.667; 414 100.12); layer = <CALayer: 0x60000023fbc0>>
   | <UICollectionViewCell: 0x7fdd9f72d1a0; frame = (0 701; 414 100.12); layer = <CALayer: 0x60000023fdc0>>
  • iPhone Plus态秧,UICollectionView董虱,Cell高度設置成100.12扼鞋,強制被按渲染像素對齊了,frame.origin.y被調整后的值愤诱,如300.5 400.5 500.5
   | <UICollectionViewCell: 0x7f85b441b6c0; frame = (0 0; 375 100.12); hidden = YES; layer = <CALayer: 0x600000035ec0>>
   | <UICollectionViewCell: 0x7f85b4502e10; frame = (0 100; 375 100.12); hidden = YES; layer = <CALayer: 0x600000035c20>>
   | <UICollectionViewCell: 0x7f85b4505c10; frame = (0 200; 375 100.12); layer = <CALayer: 0x600000036300>>
   | <UICollectionViewCell: 0x7f85b4506400; frame = (0 300.5; 375 100.12); layer = <CALayer: 0x600000036be0>>
   | <UICollectionViewCell: 0x7f85b4506d70; frame = (0 400.5; 375 100.12); layer = <CALayer: 0x600000227ac0>>
   | <UICollectionViewCell: 0x7f85b4507560; frame = (0 500.5; 375 100.12); layer = <CALayer: 0x6000002277c0>>

備注

Points(邏輯像素)<--->Rendered Pixels(渲染像素)<--->Physical Pixels(物理像素)

iOS不同機型尺寸.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末云头,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子淫半,更是在濱河造成了極大的恐慌溃槐,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件科吭,死亡現(xiàn)場離奇詭異昏滴,居然都是意外死亡猴鲫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門谣殊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拂共,“玉大人,你說我怎么就攤上這事姻几∫撕” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵蛇捌,是天一觀的道長抚恒。 經常有香客問我,道長络拌,這世上最難降的妖魔是什么俭驮? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮盒音,結果婚禮上表鳍,老公的妹妹穿的比我還像新娘。我一直安慰自己祥诽,他們只是感情好譬圣,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雄坪,像睡著了一般厘熟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上维哈,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天绳姨,我揣著相機與錄音,去河邊找鬼阔挠。 笑死飘庄,一個胖子當著我的面吹牛,可吹牛的內容都是我干的购撼。 我是一名探鬼主播跪削,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼迂求!你這毒婦竟也來了碾盐?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤揩局,失蹤者是張志新(化名)和其女友劉穎毫玖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡付枫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年烹玉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阐滩。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡春霍,死狀恐怖,靈堂內的尸體忽然破棺而出叶眉,到底是詐尸還是另有隱情址儒,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布衅疙,位于F島的核電站莲趣,受9級特大地震影響,放射性物質發(fā)生泄漏饱溢。R本人自食惡果不足惜喧伞,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绩郎。 院中可真熱鬧潘鲫,春花似錦、人聲如沸肋杖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽状植。三九已至浊竟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間津畸,已是汗流浹背振定。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肉拓,地道東北人后频。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像暖途,于是被迫代替她去往敵國和親卑惜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內容