Skip to content

Instantly share code, notes, and snippets.

@kopyl
Created April 4, 2025 04:57
Show Gist options
  • Save kopyl/b89b2f6ae029d3b488f3ed7c72e50789 to your computer and use it in GitHub Desktop.
Save kopyl/b89b2f6ae029d3b488f3ed7c72e50789 to your computer and use it in GitHub Desktop.
import Cocoa
class FlippedView: NSView {
override var isFlipped: Bool {
return true
}
}
class ViewController: NSViewController {
let items = Array(0..<3).map { String($0) }
private var scrollView: NSScrollView!
override func loadView() {
self.view = NSView(frame: NSRect(x: 0, y: 0, width: 400, height: 300))
}
override func viewDidLoad() {
super.viewDidLoad()
scrollView = NSScrollView(frame: view.bounds)
scrollView.hasVerticalScroller = true
scrollView.autoresizingMask = [.width, .height]
scrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(scrollView)
let stackView = NSStackView()
stackView.orientation = .vertical
stackView.alignment = .leading
stackView.spacing = 4
stackView.translatesAutoresizingMaskIntoConstraints = false
let flippedView = FlippedView(frame: scrollView.bounds)
flippedView.addSubview(stackView)
scrollView.documentView = flippedView
for item in items {
let textView = NSTextField(labelWithString: item)
stackView.addArrangedSubview(textView)
}
NSLayoutConstraint.activate([
stackView.leadingAnchor.constraint(equalTo: scrollView.contentView.leadingAnchor, constant: 10),
stackView.trailingAnchor.constraint(equalTo: scrollView.contentView.trailingAnchor, constant: -10),
stackView.topAnchor.constraint(equalTo: scrollView.contentView.topAnchor, constant: 10)
])
NSLayoutConstraint.activate([
scrollView.topAnchor.constraint(equalTo: view.topAnchor),
scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment