如何通过设置框架属性来移动NSView或调整NSView的大小



我在故事板中创建了NSView。在这种情况下,它是一个NSTextField。在NSViewControllerviewDidLoad()方法中,我想有条件地调整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()
    }
}

最新更新