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

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

【问题讨论】:

    标签: objective-c cocoa nsscrollview nscollectionview 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
    }
    

    【讨论】:

      猜你喜欢
      • 2020-02-11
      • 2018-08-12
      • 2018-06-19
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      相关资源
      最近更新 更多