UICollectionView 已经设置 minimumInteritemSpacing, minimumLineSpacing 两个属性为 0, 依然有空隙, 请问如何解决?

2016-04-29 11:59:37 +08:00
 dedewei
Cmd+3 大小的模拟器中显示有空隙,
Cmd+2 没有空隙,
Cmd+1 有空隙,
真机有空隙

# layout 的代码
let layout = collectionViewLayout as! UICollectionViewFlowLayout
layout.minimumInteritemSpacing = 0
layout.minimumLineSpacing = 0

let cellW : CGFloat = UIScreen.mainScreen().bounds.width / 3.0
let cellH : CGFloat = (UIScreen.mainScreen().bounds.height - 64) / 4.0
layout.itemSize = CGSize(width: cellW, height: cellH)

花了很多时间 Google, 依然毫无头绪....

# 图片
19465 次点击
所在节点    iDev
19 条回复
564425833
2016-04-29 12:13:03 +08:00
间隙有多大?是这一条黑线?
dedewei
2016-04-29 12:34:31 +08:00
@564425833 嗯, 一条黑线, 如图中那样
codeisjobs
2016-04-29 12:57:13 +08:00
贴的代码没问题 既然真机有问题 那就可能是其他地方出问题了. 约束?
banxi1988
2016-04-29 13:11:41 +08:00
要不搞个 Demo 放网上,发地址过来,我下载下来帮你调调?
564425833
2016-04-29 13:21:20 +08:00
把 cellW 用 ceil 函数取一下整 试试看。
xi_lin
2016-04-29 13:38:29 +08:00
github 放个 demo 吧,代码应该没有问题
loveuqian
2016-04-29 13:43:49 +08:00
我猜肯定是 cellW 除 3 的时候发生了问题
holy_sin
2016-04-29 13:46:13 +08:00
把 cell size 取整试试
dxk611
2016-04-29 13:54:38 +08:00
没找到完全解决这个问题的方法, minimumInteritemSpacing 和 minimumLineSpacing 都带“ minimum ”前缀,说明是最小间距,但是并不保证 item 之间的间距一定是最小,取决于 autolayout 布局时, spacing = (屏幕 width -(itemWidth * itemNum) - contentInset.left - contentInset.right)/(itemNum - 1),spacing 的值是否为 0.5 的倍数
panzhougeek
2016-04-29 13:55:53 +08:00
问题就是因为不同的屏幕宽度不一样。你在除的时候 最好判断下机型。尽量能够是整数最好。不然就会有空隙,
比如 4S 的时候或者 5 的时候+1 或者-1 一般都能达到你要的效果了。 cell 的加起来的宽度可以比 view 的宽度大。但是尽量不要小。。。小就会出现空隙
dedewei
2016-04-29 17:01:46 +08:00
@banxi1988 看到这句话的时候感动坏了, 还担心自己问的问题太小白或被骂先 Google, 真的被感动坏了, 多谢. you saved my day.(用中文不知道该怎么讲, 见谅...)
dedewei
2016-04-29 17:07:46 +08:00
@564425833
@codeisjobs
@564425833
@xi_lin
@loveuqian
@dxk611
@panzhougeek

感谢大家, 问题解决了. 😃
xi_lin
2016-04-29 21:31:47 +08:00
@panzhougeek
我记得 cell 宽度之和超过 view 的话会折到下一行行头吧?
EggmanQ
2016-04-30 22:47:41 +08:00
试试设置为 0.01f ,之前 reuserableview 的高度要这样才能变得接近 0 (不见)
dedewei
2016-04-30 23:10:13 +08:00
@EggmanQ 之前尝试过设置 0.0000001 的, 无效
fbr91
2016-05-03 14:14:15 +08:00
ceil or floor 取整试试
ezkuangren
2016-05-15 22:10:20 +08:00
请问,您是怎么解决的?我也有这样的问题
dedewei
2016-05-20 20:33:01 +08:00
@ezkuangren 宽度必须是整数, 按型号判断屏幕大小后分三分, 比如 4 寸的 320 = 106+107+107
linvx
2016-08-24 17:11:42 +08:00
https://github.com/lingtingSir/LTTemplateLayoutItem 有演示例子,可以使用 UICollectionViewLayout 实现,而且高度宽度自适应缓存哦~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/275287

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX