【发布时间】:2015-09-22 08:47:48
【问题描述】:
我有一个示例项目来演示这里的问题
https://github.com/ericgorr/autolayout_with_addsubview.git
我有一个名为 CalcView 的视图,我想以编程方式将其作为子视图添加到应用程序主窗口的视图中。当我调整窗口大小时,我希望调整 CalcView 的大小。
在 MainWindowController 的 windowDidLoad 中,我添加了子视图:
let calcViewController = ELIZCalcView()
let calcView = calcViewController.view
calcContentView?.addSubview( calcViewController.view )
我尝试通过以下方式添加约束:
let bindings = [ "calcView": calcView ]
let horizontalContraint:[AnyObject] = NSLayoutConstraint.constraintsWithVisualFormat( "H:|[calcView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: bindings )
let verticalContraint:[AnyObject] = NSLayoutConstraint.constraintsWithVisualFormat( "V:|[calcView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: bindings )
calcContentView?.addConstraints( horizontalContraint )
calcContentView?.addConstraints( verticalContraint )
现在,对于知道如何正确解释该代码的人来说,很明显它不会工作。运行我的应用程序后,我根本无法调整窗口大小。此外,我在控制台中看到以下错误消息:
2015-07-04 16:04:45.019 aocsCalc[5797:3526462] Unable to simultaneously satisfy constraints: (
"<NSLayoutConstraint:0x618000082440 V:|-(0)-[NSView:0x600000120f00] (Names: '|':aocsCalc.ELIZHighlightView:0x608000120500 )>",
"<NSAutoresizingMaskLayoutConstraint:0x618000084100 h=--& v=&-- V:|-(-2)-[NSView:0x600000120f00] (Names: '|':aocsCalc.ELIZHighlightView:0x608000120500 )>" )
Will attempt to recover by breaking constraint <NSLayoutConstraint:0x618000082440 V:|-(0)-[NSView:0x600000120f00] (Names: '|':aocsCalc.ELIZHighlightView:0x608000120500 )>
Set the NSUserDefault NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints to YES to have -[NSWindow visualizeConstraints:] automatically called when this happens. And/or, break on objc_exception_throw to catch this in the debugger.
如果我删除垂直约束,错误消息就会消失,我可以垂直调整窗口大小。
那么,我需要做些什么简单的事情才能使 CalcView 与窗口一起调整大小?
【问题讨论】:
标签: xcode macos swift cocoa autolayout