3

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

4

2 回答 2

2

对于常规滚动视图,您可以通过将水平和垂直滚动设置为 false 值来删除滚动。因此,对于 PDF 视图,请尝试以下操作:

NSScrollView *enclosingScrollView = [myPdfView enclosingScrollView];
[enclosingScrollView setHasHorizontalScroller:NO];
[enclosingScrollView setHasVerticalScroller:NO];
于 2014-07-17T09:52:51.633 回答
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 的超级视图。

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

if let scrollView = pdfView.enclosedScrollView {
    scrollView.usesPredominantAxisScrolling = true
    scrollView.hasHorizontalScroller = false
    scrollView.horizontalScrollElasticity = NSScrollView.Elasticity.none
}
于 2018-10-04T16:32:42.217 回答