Пространство между ячейками UICollectionViewLayout - PullRequest
0 голосов
/ 04 сентября 2018

В настоящее время я использую этот макет фреймворка TreeMap, полностью закодированный в Swift: https://github.com/yahoo/YMTreeMap

Я создал свой собственный класс Layout для настройки ячеек следующим образом:

import UIKit

class Layout: UICollectionViewLayout {

    var rects = [CGRect]() {
        didSet {
            invalidateLayout()
        }
    }

    override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool {
        return true
    }

    override var collectionViewContentSize: CGSize {
        return self.collectionView?.frame.size ?? .zero
    }

    override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
        let attrs = UICollectionViewLayoutAttributes(forCellWith: indexPath)
            attrs.frame = rects[indexPath.item]
        return attrs
    }

    open override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {

        var index = 0

        return rects.compactMap { (itemRect: CGRect) -> UICollectionViewLayoutAttributes? in
            let attrs = rect.intersects(itemRect) ?
                self.layoutAttributesForItem(at: IndexPath(item: index, section: 0)) : nil

            index += 1

            return attrs
        }

    }
}

Однако мне не удается вставить пробелы между ячейками. Я пробовал многие вещи, как минимум LineSpacingForSectionAt, но безуспешно ...

Вот что у меня есть: digitalblend.fr / today.png и вот что нужно: digitalblend.fr / required.png

Есть идеи? Заранее большое спасибо!

1 Ответ

0 голосов
/ 04 сентября 2018

Возможно, вы захотите изменить ограничения, которые определяют ваш пользовательский макет UICollectionViewCell. Смотрите пример, который поставляется с YMTreeMap. В целевой YMTreeMap-iOS, изменив следующие строки кода в override init(frame: CGRect):

    colorView.widthAnchor.constraint(equalTo: contentView.widthAnchor, constant: -1.0).isActive = true
    colorView.heightAnchor.constraint(equalTo: contentView.heightAnchor, constant: -1.0).isActive = true

до

    colorView.widthAnchor.constraint(equalTo: contentView.widthAnchor, constant: -8.0).isActive = true
    colorView.heightAnchor.constraint(equalTo: contentView.heightAnchor, constant: -8.0).isActive = true

Вы можете получить это представление:

enter image description here

...