在 NSCollectionView 中禁用 PDFView 的滚动

Posted

技术标签:

【中文标题】在 NSCollectionView 中禁用 PDFView 的滚动【英文标题】:Disable scroll for PDFView inside NSCollectionView 【发布时间】:2014-07-17 07:27:38 【问题描述】:

我在 CollectionView 中有一个 PdfView。由于两者都有自己的滚动视图,我在滚动时有冲突。所以我想禁用 PdfView 的滚动。我该怎么做?

【问题讨论】:

【参考方案1】:

对于常规滚动视图,您可以通过将水平和垂直滚动设置为 false 值来移除滚动。所以对于 PDF 视图试试这个:

NSScrollView *enclosingScrollView = [myPdfView enclosingScrollView];
[enclosingScrollView setHasHorizontalScroller:NO];
[enclosingScrollView setHasVerticalScroller:NO];

【讨论】:

我认为这不应该被标记为正确。 enclosureScrollView 获取父滚动视图 - 不是 pdfView 内部使用的。还有,has..Scroller 只是设置是否有滚动条视图,而不是设置滚动视图是否实际滚动。【参考方案2】:

我的解决方案有点粗糙,但确实有效。 我只想在我的 PDFViews 上停止水平滚动 - 我的收藏视图水平滚动。

我制作了一个视图,它选择性地过滤掉滚动鼠标事件并将其放在 PFD 视图上。

class HorizontalScrollBlockerView: NSView

    var scrollNextResponder: NSResponder?

    override func scrollWheel(with event: NSEvent) 
        guard scrollNextResponder != nil else 
            return
        

        if fabs(event.deltaX) >= fabs(event.deltaY) 
            scrollNextResponder!.scrollWheel(with: event)
         else 
            super.scrollWheel(with: event)
        
    

我将视图的“scrollNextResponder”设置为 PDFView 的超级视图。

我还编写了一个方法来获取第一个子滚动视图(enclosedScrollView),它确保 PDFView 在正确缩放时在水平轴上是实心的。

if let scrollView = pdfView.enclosedScrollView 
    scrollView.usesPredominantAxisScrolling = true
    scrollView.hasHorizontalScroller = false
    scrollView.horizontalScrollElasticity = NSScrollView.Elasticity.none

【讨论】:

以上是关于在 NSCollectionView 中禁用 PDFView 的滚动的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 4.2 中 NSCollectionView 的 SupplementaryElementKind 字符串值中使用啥

NSCollectionView 中的居中项目

NSCollectionView 是不是与 CoreData 兼容

有没有办法在Swift中以编程方式设置NSCollectionView?

NSCollectionView 在 selectable=YES 时窃取焦点

带有网络图像的 NSCollectionView