swift - 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 吗?
解决方案
我认为你让你的生活变得非常艰难,因为你做的事情并不完全被 Apple 推荐。首先,你不应该继承NSScrollView
. 相反,您应该首先阅读Apple的 Cocoa 滚动视图编程指南简介,以了解如何创建正确的视图层次结构以NSScrollView
使其正常工作。
第二个建议是让您查看这篇关于如何在 Playground 中设置的好文章NSScrollView
,以便您可以使用您想要实现的代码。
第三,使用 Autolayout 并NSScrollView
给很多人带来了很多悲痛。您需要正确设置 AutoLayout,以便一切按预期工作。我建议您查看 Ken Thomases 的这个答案,它清楚地解释了您需要如何设置自动布局约束NSScrollView
才能正常工作。
推荐阅读
- javascript - 如何根据单词列表检查用户输入的字符串
- spring-webflux - Axon Webflux QueryGateway 如何处理 Mono ResponseTypes
- javascript - 检查两个物体是否碰撞并在撞击时减速的最有效方法是什么?
- caching - 使用 HashTable 将对象作为值保存在 Redis 中
- angular - 预选选项-值
- asynchronous - Java 8 异步非阻塞 IO HTTP 客户端
- python - 程序在Python上的错误操作,计算两个数之和
- c++ - 如何从向量中的 args 调用函数?
- compiler-construction - 预期错误;在使用 bison 和 flex 休息之前
- virtualbox - 无法连接数据库:Mongoose/MongoDB,虚拟盒子