以编程方式配置最大项目间距(swift 3.0)

Posted

技术标签:

【中文标题】以编程方式配置最大项目间距(swift 3.0)【英文标题】:configuring maximum inter-item spacing programmatically (swift 3.0) 【发布时间】:2017-04-08 00:29:21 【问题描述】:

目前,每当我在 UICollectionView 中创建单元格时,每个单元格之间都有一个恒定的垂直间距。我想删除单元格之间的间距。研究了类似的问题和文档,我发现这个间距来自一个实例属性; minimumInterItemSpacing,默认值为 10。显然有两种方法可以改变这个值,

使用

collection​View(_:​layout:​minimum​Interitem​Spacing​For​Section​At:​)

我确实尝试过实现...

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat 

    return 0

还有,

直接设置 minimum​Interitem​Spacing 属性。

使用...

var minimumInteritemSpacing: CGFloat  get set 

也许我执行错误,但间距仍然存在。 值得注意的信息,我使用的是 swift 3.0,并且该类被子类化为 UICollectionViewController 和 UICollectionViewDelegateFlowLayout。

有什么建议吗?

【问题讨论】:

【参考方案1】:

在实例化UICollectionViewController 的子类时以编程方式进行,可以这样做:

let layout = UICollectionViewFlowLayout()
layout.minimumLineSpacing = 0

let collectionViewController = MyCollectionViewController(collectionViewLayout: layout))

如果您的类不是UICollectionViewController 的子类,您可以创建自己的collectionView(不要忘记实现UICollectionViewDelegateUICollectionViewDataSource 协议):

lazy var collectionView: UICollectionView = 
    let layout = UICollectionViewFlowLayout()
    layout.minimumLineSpacing = 0

    let uicv = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
    uicv.delegate = self
    uicv.dataSource = self
    uicv.backgroundColor = .white

    return uicv
()

更新

还有另一种方法可以实现,如果您使用UICollectionViewController 的子类,您可以在viewDidLoad() 方法中实现它:

let layout = collectionView?.collectionViewLayou as! UICollectionViewFlowLayout
layout.minimumLineSpacing = 0

【讨论】:

我的类是 UICollectionViewController 类型的类,但我仍然无法实现它。我收到错误无法在属性初始化程序中使用实例成员“布局”;属性初始化程序在“self”可用之前运行 你能进一步解释你的第二种方法吗? @Stefan 我用另一种方式更新了我的答案来完成你想要的。

以上是关于以编程方式配置最大项目间距(swift 3.0)的主要内容,如果未能解决你的问题,请参考以下文章

想知道如何以编程方式在 swift 3.0 中对 UITableViewCell 进行子类化?

以编程方式在 Stackview 上设置间距

在 rootView Swift 3.0 之后以编程方式在 ViewControllers 添加栏按钮项

在 Swift 中以编程方式将视图添加到 stackview

Swift - 以编程方式在 UIView 中定位项目

Swift:不能以编程方式配置自定义表格单元格?没有调用初始化?