2016-07-31 14 views
0

Die NSScrollView enthält eine NSStackView. Die NSStackView-Elemente werden zur Laufzeit hinzugefügt. Die neuen NSStackView-Elemente sind von unten nach oben, aber ich möchte, dass sie von oben nach unten sind. enter image description here enter image description hereNSScrollView enthält NSStackView. Warum die NSStackView-Elemente von unten nach oben?

Die main.storyboard

enter image description here

Der 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. 
     } 
    } 
} 

Die Checkbox Schaltfläche Klasse

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) 
    } 
} 

Antwort

5

Standardmäßig sind NSClipViews (und die Basis-NSView) nicht gewendet und die Koordinaten (und die Positionierung der Scroll-Ansicht) sind relativ zur unteren linken Ecke.

Sie können NSClipView ableiten und isFlipped überschreiben, um true zurückzugeben. Setzen Sie dann in IB die Clip-Ansicht der Bildlaufansicht auf diese benutzerdefinierte Klasse.

+0

Sie sind mein Erlöser! Vielen Dank! – Tommy

-1

In StackView haben Sie eine Ausrichtungseigenschaft.

enter image description here

Für weitere Informationen siehe this tutorial.

+0

Ich habe versucht, die Ausrichtung der Stapelansicht zu ändern, aber sie hat ihre Position in der Bildlaufansicht nicht geändert. Ich glaube nicht, dass es das ist. – Uncommon

0

Sie haben Ihre Ansicht (das übergeordnete Element der Stapelansicht) in der übergeordneten Clipansicht über den führenden und unteren Anker verankert. Versuchen Sie stattdessen, oben und unten zu verwenden. Hinweis: Ihre Stapelansicht selbst scheint korrekt ausgerichtet zu sein.