在 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 是不是与 CoreData 兼容
有没有办法在Swift中以编程方式设置NSCollectionView?