首页 > 解决方案 > 垂直滚动 NSTableView Swift macOS 中的水平 NSCollectionView

问题描述

我创建了一个垂直滚动的 NSTableView。这个表格视图的每个单元格都包含一个标题,下面是一个水平滚动的 NSCollectionView。当滚动时光标位于标题上时,垂直表格视图滚动正常,但当光标位于水平滚动集合视图上时,表格视图不会滚动。

即使光标在集合视图上,如何让表格视图滚动?我了解 tableview 和 scrollview 使用两个单独的滚动视图,但我不知道是否有办法同步这两个。

标签: swiftmacos

解决方案


好的,感谢上帝,毕竟我在 stackoverflow 上找到了解决方案。它是在 Objective-C 中的,所以我将它翻译成 Swift。这里适用于任何正在寻找类似问题的人:

class MTHorizontalScrollView: NSScrollView {

var currentScrollIsHorizontal = false

override func draw(_ dirtyRect: NSRect) {
    super.draw(dirtyRect)
}

override func scrollWheel(with event: NSEvent) {
    if event.phase == NSEvent.Phase.began || (event.phase == NSEvent.Phase.ended && event.momentumPhase == NSEvent.Phase.ended) {
        currentScrollIsHorizontal = fabs(event.scrollingDeltaX) > fabs(event.scrollingDeltaY)
    }
    if currentScrollIsHorizontal {
        super.scrollWheel(with: event)
    } else {
        self.nextResponder?.scrollWheel(with: event)
    }
}

}

完全归功于SO LINK


推荐阅读