首页 > 解决方案 > NSScrollView 不滚动

问题描述

我在需要滚动的 Mac 应用程序中有一个表单。我在 ViewController 中嵌入了一个滚动视图。我为 scrollView 分配了一个标识符,该标识符将其链接到它自己的 NSScrollView 文件。约束设置为视图控制器的顶部、右侧和左侧,它还具有设置为视图控制器的完整高度的高度约束。

这是我的代码:

import Cocoa

class ScrollView: NSScrollView {

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

    // Drawing code here.
    NSRect documentView.NSMakeSize(0, 0, 1058.width, 1232.height)
}

override func scrollWheel(with event: NSEvent) {
    switch event.phase {
    case NSEvent.Phase.began:
        Swift.print("Began")
//        case NSEvent.Phase.changed:
//            Swift.print("Changed")
    case NSEvent.Phase.ended:
        Swift.print("Ended")
    default:
        break
    }

    switch event.momentumPhase {
    case NSEvent.Phase.began:
        Swift.print("Momentum Began")
//        case NSEvent.Phase.changed:
//            Swift.print("Momentum Changed")
    case NSEvent.Phase.ended:
        Swift.print("Momentum Ended")
    default:
        break
    }
    super.scrollWheel(with: event)
}

我似乎根本无法让我的应用滚动。我想我没有正确设置框架。正确设置框架的最佳方法是什么?我正确编码 NSScrollView 吗?

标签: swiftmacoscocoansscrollview

解决方案


我认为你让你的生活变得非常艰难,因为你做的事情并不完全被 Apple 推荐。首先,你不应该继承NSScrollView. 相反,您应该首先阅读Apple的 Cocoa 滚动视图编程指南简介,以了解如何创建正确的视图层次结构以NSScrollView使其正常工作。

第二个建议是让您查看这篇关于如何在 Playground 中设置的好文章NSScrollView,以便您可以使用您想要实现的代码。

第三,使用 Autolayout 并NSScrollView给很多人带来了很多悲痛。您需要正确设置 AutoLayout,以便一切按预期工作。我建议您查看 Ken Thomases 的这个答案,它清楚地解释了您需要如何设置自动布局约束NSScrollView才能正常工作。


推荐阅读