             if needsLayoutReload { self.needsLayout = true }
         }
     }
+
+    private var _layoutRequested = false
+    open func requestLayout(animated: Bool = false, delay delayTime: TimeInterval = 0.01) {
+        if _layoutRequested { return }
+        self._layoutRequested = true
+        delay(delayTime) {
+            if self._layoutRequested {
+                self.reloadLayout(animated, scrollPosition: .nearest, completion: nil)
+            }
+        }
+
+    }
     
     open override func layout() {
         self._floatingSupplementaryView.frame = self.bounds

    }
    
    private func _reloadLayout(_ animated: Bool, scrollPosition: CollectionViewScrollPosition = .nearest, completion: AnimationCompletion?, needsRecalculation: Bool) {
        self.layoutLeadingViews()
        
        if needsRecalculation {

        return sender.draggingSourceOperationMask
    }
    open override func performDragOperation(_ sender: NSDraggingInfo) -> Bool {
        defer {
            self.isDragging = false
        }
        if let perform = self.interactionDelegate?.collectionView?(self, performDragOperation: sender) {
            return perform
        }
