NSScrollView 包含 NSStackView。为什么 NSStackView 项目从底部到顶部?
NSScrollView containing NSStackView. Why the NSStackView items from bottom to Top?
包含 NSStackView 的 NSScrollView。 NSStackView 的项目将添加 runtime.The 新 NSStackView 的项目是从下到上,但我希望它们是从上到下。
main.storyboard
ViewController
import Cocoa
class ViewController: NSViewController {
var todoList:[Todo] = []
@IBOutlet weak var todosStackView: NSStackView!
@IBOutlet weak var todosScrollView: NSScrollView!
@IBAction func onEnter(sender: NSTextField) {
let todo = Todo()
todo.content = sender.stringValue
self.todoList.append(todo)
let todoItemView = TodoItem()
todoItemView.setButtonType(.SwitchButton)
todoItemView.todo=todo
todosStackView.addView(todoItemView, inGravity: .Top)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
}
复选框按钮 class
import Cocoa
class TodoItem: NSButton {
var todo:Todo!{
didSet {
self.title = self.todo.content
self.state = self.todo.done ? NSOnState : NSOffState
}
}
func completeTodo(){
if(self.state == NSOnState){
self.todo.done = true
}else{
self.todo.done = false
}
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
self.setButtonType(.SwitchButton)
self.target = self
self.action = #selector(self.completeTodo)
}
}
您的视图(堆栈视图的父视图)通过前导和底部锚点锚定到父剪辑视图。尝试使用 leading 和 top 代替。注意:您的堆栈视图本身似乎已正确对齐。
默认情况下,NSClipView(和基础 NSView)不会翻转,因此坐标(和滚动视图定位)是相对于左下角的。
您可以子class NSClipView 并覆盖isFlipped
到return true
。然后在IB里面,把scroll view的clip view设置成那个自定义的class。
包含 NSStackView 的 NSScrollView。 NSStackView 的项目将添加 runtime.The 新 NSStackView 的项目是从下到上,但我希望它们是从上到下。
main.storyboard
ViewController
import Cocoa
class ViewController: NSViewController {
var todoList:[Todo] = []
@IBOutlet weak var todosStackView: NSStackView!
@IBOutlet weak var todosScrollView: NSScrollView!
@IBAction func onEnter(sender: NSTextField) {
let todo = Todo()
todo.content = sender.stringValue
self.todoList.append(todo)
let todoItemView = TodoItem()
todoItemView.setButtonType(.SwitchButton)
todoItemView.todo=todo
todosStackView.addView(todoItemView, inGravity: .Top)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
}
复选框按钮 class
import Cocoa
class TodoItem: NSButton {
var todo:Todo!{
didSet {
self.title = self.todo.content
self.state = self.todo.done ? NSOnState : NSOffState
}
}
func completeTodo(){
if(self.state == NSOnState){
self.todo.done = true
}else{
self.todo.done = false
}
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
self.setButtonType(.SwitchButton)
self.target = self
self.action = #selector(self.completeTodo)
}
}
您的视图(堆栈视图的父视图)通过前导和底部锚点锚定到父剪辑视图。尝试使用 leading 和 top 代替。注意:您的堆栈视图本身似乎已正确对齐。
默认情况下,NSClipView(和基础 NSView)不会翻转,因此坐标(和滚动视图定位)是相对于左下角的。
您可以子class NSClipView 并覆盖isFlipped
到return true
。然后在IB里面,把scroll view的clip view设置成那个自定义的class。