2016-07-31 25 views
0

NSStackViewを含むNSScrollView。 NSStackViewのアイテムは実行時に追加されます。新しいNSStackViewのアイテムは下から上にありますが、上から下に移動します。 enter image description hereenter image description hereNSStackViewを含むNSScrollView。 NSStackViewの項目が下から上に表示されるのはなぜですか?

main.storyboard

enter image description here

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

チェックボックスボタンクラス

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

答えて

5

デフォルトでは、NSClipViews(およびベースのNSView)は反転されないため、座標(およびスクロールビューの位置)は左下を基準にしています。

NSClipViewをサブクラス化し、isFlippedをオーバーライドしてtrueを返すことができます。次に、IBで、スクロールビューのクリップビューをそのカスタムクラスに設定します。

+0

あなたは私の救い主です!どうもありがとうございました! – Tommy

-1

In StackViewに配置プロパティがあります。

enter image description here

詳細についてはthis tutorialを参照してください。

+0

スタックビューの配置を変更しようとしましたが、スクロールビューでその位置が変更されませんでした。私はそれがそうであるとは思わない。 – Uncommon

0

トップビューとボトムアンカーを使用して、親クリップビューに固定されたビュー(スタックビューの親)があります。代わりに先頭と先頭を使用してみてください。注:スタックビュー自体が適切に整列しているようです。

関連する問題