Thursday, 22 August 2019

SwipeCellKit does not swipe cell

I want to implement UITableView's UISwipeActionsConfiguration for a UICollectionView. In order to do so, I am using SwipeCellKit - github


My UICollectionView adopts to the SwipeCollectionViewCellDelegate protocol. And the cell inherits from SwipeCollectionViewCell.

ViewController with UICollectionView

class SwipeViewController: UIViewController {

    lazy var collectionView: UICollectionView = {
        let layout = UICollectionViewFlowLayout()
        layout.scrollDirection = .vertical
        let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
        collectionView.register(SwipeableCollectionViewCell.self, forCellWithReuseIdentifier: SwipeableCollectionViewCell.identifier)
        collectionView.showsVerticalScrollIndicator = false
        collectionView.contentInset = UIEdgeInsets(top: 8, left: 0, bottom: 4, right: 0)
        collectionView.backgroundColor = UIColor(white: 0.97, alpha: 1)
        collectionView.dataSource = self
        collectionView.delegate = self
        return collectionView
    }()

    var items: [String] = {
        var items = [String]()
        for i in 1 ..< 20 {
            items.append("Item \(i)")
        }
        return items
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(collectionView)
        collectionView.setConstraints(topAnchor: view.topAnchor,
                              leadingAnchor: view.leadingAnchor,
                              bottomAnchor: view.bottomAnchor,
                              trailingAnchor: view.trailingAnchor,
                              leadingConstant: 10,
                              trailingConstant: 10)
    }
}

extension SwipeViewController: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: collectionView.frame.width, height: 80)
    }
}

extension SwipeViewController: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return items.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: SwipeableCollectionViewCell.identifier, for: indexPath) as! SwipeableCollectionViewCell
        cell.backgroundColor = BackgroundColor.colors[indexPath.row]
        cell.delegate = self
        return cell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    }
}

extension SwipeViewController: SwipeCollectionViewCellDelegate {

    func collectionView(_ collectionView: UICollectionView, editActionsForItemAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? {
        guard orientation == .right else { return nil }

        let deleteAction = SwipeAction(style: .destructive, title: "Delete") { action, indexPath in
        }


        return [deleteAction]
    }

}

SwipeCollectionViewCell

class SwipeableCollectionViewCell: SwipeCollectionViewCell {
    override init(frame: CGRect) {
        super.init(frame: frame)

        self.addSubview(nameLabel)

        nameLabel.setConstraints(topAnchor: self.topAnchor,
                         leadingAnchor: self.leadingAnchor,
                         bottomAnchor: self.bottomAnchor,
                         trailingAnchor: self.trailingAnchor)

        self.backgroundColor = .white
    }

    static let identifier = "TaskListTableViewCell"


    private let nameLabel: UILabel = {
        let label =  UILabel()
        label.text = "Simulator user has requested new graphics quality"
        label.numberOfLines = 0
        return label
    }()


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

After doing so, when I swipe the cell, the deleteAction overlaps with the content of the cell.

enter image description here

As you see in the screenshot, the cell's content overlaps with the deleteAction text.



from SwipeCellKit does not swipe cell

No comments:

Post a Comment