V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
dedewei
V2EX  ›  iDev

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

  •  
  •   dedewei · 2016-04-29 11:59:37 +08:00 · 19471 次点击
    这是一个创建于 3129 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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, 依然毫无头绪....

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

    感谢大家, 问题解决了. 😃
    xi_lin
        13
    xi_lin  
       2016-04-29 21:31:47 +08:00
    @panzhougeek
    我记得 cell 宽度之和超过 view 的话会折到下一行行头吧?
    EggmanQ
        14
    EggmanQ  
       2016-04-30 22:47:41 +08:00
    试试设置为 0.01f ,之前 reuserableview 的高度要这样才能变得接近 0 (不见)
    dedewei
        15
    dedewei  
    OP
       2016-04-30 23:10:13 +08:00
    @EggmanQ 之前尝试过设置 0.0000001 的, 无效
    fbr91
        16
    fbr91  
       2016-05-03 14:14:15 +08:00
    ceil or floor 取整试试
    ezkuangren
        17
    ezkuangren  
       2016-05-15 22:10:20 +08:00
    请问,您是怎么解决的?我也有这样的问题
    dedewei
        18
    dedewei  
    OP
       2016-05-20 20:33:01 +08:00
    @ezkuangren 宽度必须是整数, 按型号判断屏幕大小后分三分, 比如 4 寸的 320 = 106+107+107
    linvx
        19
    linvx  
       2016-08-24 17:11:42 +08:00
    https://github.com/lingtingSir/LTTemplateLayoutItem 有演示例子,可以使用 UICollectionViewLayout 实现,而且高度宽度自适应缓存哦~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2805 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:55 · PVG 19:55 · LAX 03:55 · JFK 06:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.