Swift OSX 动态添加项目到滚动列表

Swift OSX dynamically add items to a scroll list

在我创建的应用程序中,我将“Scroll View”拖放到主故事板。这会自动创建一个 NSScrollView,里面是一个 NSClipView,里面是一个 NSView。很好

我想要实现的是动态地将复选框添加到该滚动视图。提前不知道会有多少checkbox(这就是为什么我需要一个scroll)。

NSScrollViewNSClipView 添加子视图实际上会显示一些复选框,但未启用滚动。将子视图添加到 NSView 不会呈现任何内容。

编辑:我也尝试修改 NSScrollViewNSClipViewNSView 的高度,但没有成功。

当视图中添加了太多复选框时,如何启用滚动?

所以这个技巧是创建一个容器视图(即 NSView)来容纳按钮。当您在故事板中创建 NSScrollView 时,它会为您创建 NSClipViewNSView。在向 NSView 添加或删除按钮后(您可以创建自己的按钮,或使用提供的按钮),将滚动条的 documentView 设置为包含您的按钮的视图。这会正确重置滚动条中的所有内容,您应该正在滚动!如果您更改表示滚动内容的视图的大小,您只需将该视图重新分配给 scroller.documentView,它将相应地更新所有内容。

这是一个向将滚动的滚动条添加 20 个按钮的可怕示例:

let documentView = NSView(frame: CGRectMake(0,0,200,1200))

for index in 0..<20 {
  let offset = CGFloat(index * 50)
  let button = NSButton(frame: CGRectMake(0, offset, 150, 50 ))
  documentView.addSubview(button)
}

scrollView.documentView = documentView

此处的 Apple documentation 提供了更多详细信息以及您可能想要设置的更多选项。

希望对您有所帮助!