这个问题与我之前提出的如何添加在单独的 xib 中定义的 View here 的问题相关。 。我仍在努力解决这个问题,现在我遇到了此布局特定错误,因此我认为最好提出一个新问题。
我有 2 个 xib,我正在尝试将 xib1 中的 View 插入到 xib2 上的 NSView 占位符中,并且我希望在调整 View 大小时调整 xib1 中的 View 大小。
这是我尝试设置左/右约束的代码。
let placeholder: NSView = self.m_viewPlaceHolder;
let insert: NSView = UserView01().view;
insert.frame = NSRect(x: 0, y: 0, width: placeholder.frame.width, height: placeholder.frame.height);
placeholder.addSubview(insert);
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints");
let hor = NSLayoutConstraint.constraintsWithVisualFormat("H:|-[view]-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view" : insert]);
NSLayoutConstraint.activateConstraints(hor);
这是我在跟踪中看到的错误
2016-01-12 20:49:09.307 SubView01[9240:308241] Unable to simultaneously satisfy constraints:
(
"<NSLayoutConstraint:0x608000087800 H:|-(NSSpace(20))-[NSView:0x608000120500] (Names: '|':NSView:0x6080001206e0 )>",
"<NSAutoresizingMaskLayoutConstraint:0x6000000842e0 h=--& v=&-- H:|-(0)-[NSView:0x608000120500] (Names: '|':NSView:0x6080001206e0 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x608000087800 H:|-(NSSpace(20))-[NSView:0x608000120500] (Names: '|':NSView:0x6080001206e0 )>
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.
2016-01-12 21:00:19.409 SubView01[9240:308241] Clicked on overlapping visualized constraints: (
"<NSLayoutConstraint:0x608000087800 H:|-(NSSpace(20))-[NSView:0x608000120500] (Names: '|':NSView:0x6080001206e0 )> (Actual Distance - pixels):0",
"<NSAutoresizingMaskLayoutConstraint:0x6000000842e0 h=--& v=&-- H:|-(0)-[NSView:0x608000120500] (Names: '|':NSView:0x6080001206e0 )> (Actual Distance - pixels):0"
)
我在设计器中添加的唯一约束是主窗口占位符以及用户 View 标签上的左/上/右/下 0 像素约束。
最佳答案
与 View 的隐式自动调整大小掩码存在冲突。
两个选项:
通过关闭自动布局、更改蒙版并再次打开自动布局,将蒙版设置为 Interface Builder 中合适的内容,或者取消选中
将自动调整大小蒙版转换为约束
(如果有)。以编程方式执行相同的操作,或者设置掩码
view.autoresizingMask = [...]
或禁用
translatesAutoresizingMaskIntoConstraints
view.translatesAutoresizingMaskIntoConstraints = false
关于macos - 自动布局错误 - 无法同时满足约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34758795/