如何在拖动 NSCollectionView 项目时以交互方式重新排列它们?

问题描述 投票:0回答:0

Preview 之类的应用程序通过以交互方式将项目移开来指示拖动操作的放置位置。看起来像这样:

IIRC,这也是

UICollectionView
与所有标准布局的默认行为。相比之下,
NSCollectionView
更喜欢在不重新定位项目的情况下呈现插入指示器,我不太清楚如何让它完成上述操作。有趣的是,another question 中的屏幕截图似乎显示了我想要的确切行为(唉,那里的讨论无关)。

我最初的理解是布局的

-layoutAttributesForDropTargetAtPoint:
/
-layoutAttributesForInterItemGapBeforeIndexPath:
就是为了这个目的而存在的。它们不会,因为它们仅用于放置不影响项目流的指示器

当然,我可以进一步扩展布局以使其意识到拖动会话,但这已经感觉像是一个 hack,并且必须在拖动过程中手动使其无效(更不用说在

-performBatchUpdates:completionHandler:
中进行操作以触发动画响应) 对此毫无疑问。或者,我可以直接操纵物品的框架,但这也感觉像是在对抗
NSCollectionView
而不是利用它。

鉴于该模式的广泛传播,必须有一种适当的方法来实现它而不诉诸黑客。我错过了什么?

干杯。

macos drag-and-drop nscollectionview nscollectionviewlayout
© www.soinside.com 2019 - 2024. All rights reserved.