【问题标题】:How to move or resize an NSView by setting the frame property?如何通过设置 frame 属性来移动或调整 NSView 的大小?
【发布时间】:2016-04-20 02:53:34
【问题描述】:

我在故事板中创建了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()
    }
}

当视图加载时,标签仍然具有在界面生成器中设置的原始框架,而不是新设置的框架。

如何以编程方式移动/调整标签大小?

【问题讨论】:

    标签: swift macos cocoa autolayout


    【解决方案1】:

    自动布局系统是这里的罪魁祸首。当您设置框架时,自动布局系统会覆盖它以重新建立故事板中设置的隐式约束。

    将标签的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()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 2019-05-24
      相关资源
      最近更新 更多