在UICollection视图中将装饰视图创建为自定义列

时间:2018-02-07 17:43:21

标签: swift uicollectionview

我有一个显示座位表的集合视图,我已经能够使用集合视图Flow Layout实现这一点,并使用以下代码:

 class SeatsLayout: UICollectionViewFlowLayout {

let cellsPerRow: Int
override var itemSize: CGSize {
    get {
        guard let collectionView = collectionView else { return super.itemSize }
        let marginsAndInsets = sectionInset.left + sectionInset.right + minimumInteritemSpacing * CGFloat(cellsPerRow - 1)
        let itemWidth = ((collectionView.bounds.size.width - marginsAndInsets) / CGFloat(cellsPerRow)).rounded(.down)
        return CGSize(width: itemWidth, height: itemWidth)
    }
    set {
        super.itemSize = newValue
    }
}

init(cellsPerRow: Int, minimumInteritemSpacing: CGFloat = 0, minimumLineSpacing: CGFloat = 0, sectionInset: UIEdgeInsets = .zero) {
    self.cellsPerRow = cellsPerRow
    super.init()

    self.minimumInteritemSpacing = minimumInteritemSpacing
    self.minimumLineSpacing = minimumLineSpacing
    self.sectionInset = sectionInset
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

override func invalidationContext(forBoundsChange newBounds: CGRect) -> UICollectionViewLayoutInvalidationContext {
    let context = super.invalidationContext(forBoundsChange: newBounds) as! UICollectionViewFlowLayoutInvalidationContext
    context.invalidateFlowLayoutDelegateMetrics = newBounds != collectionView?.bounds
    return context
}

} 这将显示座位表,如下所示: enter image description here

我希望能够显示座位表以显示公交车中间的走道间距,如下所示:

enter image description here

我如何在UICollectionView流程布局中实现这一目标?我对IOS很陌生,发现很难做到这一点。

2 个答案:

答案 0 :(得分:1)

您可能无法使用UICollectionViewFlowLayout执行此操作,但您可以通过编写自己的布局来实现。

但是,我会首先质疑这是否很好地利用了集合视图。将这一切直接放在代码中会更简单。

答案 1 :(得分:1)

我们可以用来获得这个的小技巧。

Cell size应为one - fifth的{​​{1}}。所以我们可以在一行中获得5个单元格。你可以创建ViewController你需要什么。

numberOfItems中创建并存储seat number。所以我们可以避免重复使用。

我为48个席位做了样本。

<强>编码

Dictionary

<强>输出

enter image description here