我在故事板中创建了NSView
。在这种情况下,它是一个NSTextField
。在NSViewController
的viewDidLoad()
方法中,我想有条件地调整NSTextField
的大小和位置,但设置帧没有效果。
例如:
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()
}
}
加载视图时,标签仍然具有在界面生成器中设置的原始框架,而不是新设置的框架。
如何以编程方式移动/调整标签大小?
这里的罪魁祸首是自动布局系统。设置框架时,自动布局系统会覆盖该框架,以重新建立故事板中设置的隐含约束。
将标签的translatesAutoresizingMaskIntoConstraints
属性设置为true
。这告诉自动布局系统,它应该创建一个新的自动布局约束集,以满足您设置的新框架:
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()
}
}