macOS滚动视图NSScrollView
macOS滚动视图NSScrollView

macOS滚动视图NSScrollView

NSScrollView 是 macOS AppKit 框架中用于滚动显示内容的视图容器。它允许用户在一个固定大小的窗口中滚动查看超出可见区域的内容。

基本用法

1、创建NSScrollView:

let scrollView = NSScrollView(frame: NSRect(x: 20, y: 20, width: 300, height: 200))

2、NSScrollView显示NSView视图:

scrollView.documentView = NSView(frame: NSRect(x: 0, y: 0, width: 800, height: 600))

组成结构

1、contentView:只显示其中的一部分

2、scrollers:自动或手动显示滚动条

常见用途

1、显示长文本:用于容纳 NSTextView、NSTextField 等。

2、显示大图:包裹 NSImageView。

3、显示大视图区域:包裹自定义的 NSView。

4、表格列表滚动:配合 NSTableView 实现表格上下滚动。

使用场景

1、滚动显示完整视图

let scrollView = NSScrollView(frame: NSRect(x: 20, y: 20, width: 300, height: 200))
scrollView.hasVerticalScroller = true
scrollView.hasHorizontalScroller = true

let bigView = NSView(frame: NSRect(x: 0, y: 0, width: 800, height: 600))
bigView.wantsLayer = true
bigView.layer?.backgroundColor = NSColor.red.cgColor

scrollView.documentView = bigView
view.addSubview(scrollView)

因为NSView的尺寸比NSScrollView大,因此可以上下左右滚动显示NSView视图内容。

2、包裹TabView

let tableView = NSTableView()
let scrollView = NSScrollView()
scrollView.documentView = tableView
scrollView.hasVerticalScroller = true

macOS 中很多控件默认不会自动滚动,必须放入 NSScrollView。

常用属性

1、documentView:NSView?类型,实际滚动的内容视图。

2、hasVerticalScroller:Bool类型,是否显示垂直滚动条。

3、hasHorizontalScroller:Bool类型,是否显示水平滚动条。

4、autohidesScrollers:Bool类型,自动隐藏滚动条。

5、borderType:NSBorderType类型,设置边框样式。

6、contentInsets:NSEdgeInsets类型,内边距。

7、drawsBackground:Bool类型,是否绘制背景色。

常见问题

1、内容滚动不了怎么办?

documentView 的尺寸必须大于 NSScrollView 的尺寸才能触发滚动。

2、如何监听滚动?

监听 NSClipView 的 bounds 变化,或用通知:

NotificationCenter.default.addObserver(
    self,
    selector: #selector(scrolled),
    name: NSView.boundsDidChangeNotification,
    object: scrollView.contentView
)

总结

NSScrollView可以包裹任何NSView子类,支持手动控制滚动、滚动条样式,很多 AppKit 控件默认依赖它,例如 NSTextView, NSTableView。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注