2016-04-20 5 views
0

Я создал NSView в раскадровке. В этом случае это NSTextField. В способе NSViewControllerviewDidLoad() я хочу условно изменить размер и изменить положение NSTextField, но установка кадра не влияет.Как переместить или изменить размер NSView, установив свойство рамки?

Например:

class ViewController: NSViewController { 

    @IBOutlet var label: NSTextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
     label.frame = NSRect(x: 0, y: 0, width: 200, height: 17) 
     label.setNeedsDisplay() 
    } 
} 

Когда вид нагрузки, этикетка все еще имеет свой оригинальный кадр, как установить в интерфейсе строителя, а не вновь установить рамку.

Как программно перемещать/изменять размер этикетки?

ответ

2

Система автоматического оповещения является преступником здесь. Когда вы устанавливаете фрейм, система автоопределения переопределяет это, чтобы восстановить скрытые ограничения, установленные в раскадровке.

translatesAutoresizingMaskIntoConstraints Недвижимость на этикетке до true. Это говорит системе autolayout, что он должен создать новый набор autolayout ограничений, которые удовлетворяют новый кадр вы установили:

class ViewController: NSViewController { 

    @IBOutlet var label: NSTextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
     label.frame = NSRect(x: 0, y: 0, width: 200, height: 17) 
     label.translatesAutoresizingMaskIntoConstraints = true 
     label.setNeedsDisplay() 
    } 
} 
Смежные вопросы