Скрыть предварительный просмотр UICollectionViewCell - PullRequest
1 голос
/ 26 мая 2020
• 1000 * Пользовательское представление для UICollectionViewCell Перетаскивание предварительного просмотра :
public func collectionView(_ collectionView: UICollectionView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] {
        let dragItem = UIDragItem(itemProvider: NSItemProvider())
        dragItem.previewProvider = {
            return nil
        }
}

, но предварительный просмотр перетаскивания все еще отображается, когда он поднимается, и единственный метод, который позволяет мне изменять предварительный просмотр перетаскивания во время подъема, -

public func collectionView(_ collectionView: UICollectionView, dragPreviewParametersForItemAt indexPath: IndexPath) -> UIDragPreviewParameters? {

        let previewParameters = UIDragPreviewParameters()
        previewParameters.visiblePath = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 50, height: 50), cornerRadius: 0)
        previewParameters.backgroundColor = UIColor.clear
        return previewParameters
    }

, но это позволяет мне только установить цвет фона, чтобы не скрывать предварительный просмотр перетаскивания

, а второй способ, который я пробовал, - это проверка состояния ячейки

public override func dragStateDidChange(_ dragState: UICollectionViewCell.DragState) {
    switch dragState {

    case .none:
        self.layer.opacity = 1
    case .lifting:
        self.layer.opacity = 0
    case .dragging:
        self.layer.opacity = 1
    }
}

, но это тоже не работает

кто-нибудь из вас знает, как это скрыть? или, по крайней мере, скрыть границу, и тень также может решить эту проблему

вот поднятая ячейка

enter image description here

1 Ответ

0 голосов
/ 27 мая 2020

наконец-то я нашел решение, предварительный просмотр перетаскивания на самом деле называется _UIPlatterView (после иерархии отладки), а его дочернее представление с именем _UIPortalView, которое блокирует ячейку во время длительного нажатия / подъема

и в качестве решения этого сообщения просто подклассифицируйте представление коллекции и удалите дочернее представление _UIPlatterView

Как скрыть тени в UITableViewCell при перетаскивании ячейки

public class CustomCollectionView: UICollectionView {

    override public func didAddSubview(_ subview: UIView) {
        super.didAddSubview(subview)

        if "\(type(of: subview))" == "_UIPlatterView" {
            subview.subviews.forEach({ $0.removeFromSuperview() })
        }
    }
}

, но это еще не конец, вышеупомянутое решение по-прежнему показывает предварительный просмотр перетаскивания всего за небольшую секунду, и я добавляю этот код для его очистки

extension ExampleViewController: UICollectionViewDragDelegate {
    public func collectionView(_ collectionView: UICollectionView, dragPreviewParametersForItemAt indexPath: IndexPath) -> UIDragPreviewParameters? {
        guard let currentCell: MUICalendarCollectionViewCell = collectionView.cellForItem(at: indexPath) as? MUICalendarCollectionViewCell else { return nil }

        let previewParameters = UIDragPreviewParameters()
        let path = UIBezierPath(rect: CGRect.zero)
        previewParameters.visiblePath = path
        previewParameters.backgroundColor = MUIColor.clear
        return previewParameters
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...