当用户滚动到NSTableView
末尾时,我试图找出答案。因此,当然,表视图像往常一样嵌入在NSClipView
中,而这则嵌入在NSScrollView
中。除了向 ClipView 添加插图之外,没有其他更改(顶部:20,左/右:20,底部:0(。
为了获得有关滚动的通知,我连接了NSClipView
的插座。
所以我使用这个代码:
self.clipView.postsBoundsChangedNotifications = true
NotificationCenter.default.addObserver(self,
selector: #selector(scrollViewDidScroll(notification:)),
name: NSView.boundsDidChangeNotification,
object: self.clipView)
...
@objc func scrollViewDidScroll(notification: Notification) {
print("(self.clipView.contentInsets.bottom) - (self.clipView.contentInsets.top)")
print(self.clipView.bounds)
}
如果我在滚动视图的顶部,打印结果如下所示:
0.0 - 20.0
(-20.0, -20.0, 600.0, 556.0)
// x y width height
这对我来说似乎没问题。但是如果我在底部,它看起来像这样:
0.0 - 20.0
(-20.0, 595.0, 600.0, 556.0)
在我的理解中,y 值应该是 536,而不是 595。这种差异从何而来?
观察不同的值找到了解决方案,尤其是在调整窗口大小之后。所以:
clipView.documentVisibleRect
就是这样,你真正能看到的。当然我不能使用这部分的高度值。原点值告诉我滚动视图中的位置。
总内容的高度是如此必要。因此,我必须使用clipView.documentRect
.
现在非常简单:如果 ableRects y 位置 + 可见矩形的高度与总剪辑视图的高度相同,我们就在最后。此代码有效:
@objc func scrollViewDidScroll(notification: Notification) {
let scrollY = self.clipView.documentVisibleRect.origin.y
let visibleHeight = self.clipView.documentVisibleRect.size.height
let totalHeight = self.clipView.documentRect.size.height
if scrollY + visibleHeight >= totalHeight {
print("end")
}
}