2016-01-13 50 views
1

此问题与我以前询问如何添加在单独的xib here中定义的视图的问题有关。我仍然在努力,现在我得到这个布局特定的错误,所以我认为最好问一个新的问题。Autolayout错误 - 无法同时满足约束条件

我有2个xib,我试图从xib1插入视图到xib2上的NSView占位符,并且我希望xib1的视图在视图大小调整时调整大小。

这是我尝试设置左/右约束的代码。

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" 
) 

我在设计师添加的唯一的限制是左/上/右/底部640个像素的占位符约束主要跟踪查看错误窗口,并在标签上的userview。

回答

1

存在与视图的隐式自动调整掩码的冲突。

两个选项:

  1. 通过关闭自动版式,改变了面具,并再次打开自动版式或取消translates autoresizing mask into constraints(如果可用)设置屏蔽,以适合在Interface Builder的东西。

  2. 做同样的事情无论编程设置mask

    view.autoresizingMask = [...] 
    

    或禁用translatesAutoresizingMaskIntoConstraints

    view.translatesAutoresizingMaskIntoConstraints = false 
    
+0

不幸的是,如果我设置insertview.translatemask = false,那么插入视图不显示。 –

+0

当然,你必须自己添加足够的约束。 – vadian

+0

不应该通过NSLayoutConstraint.constraintsWithVisualFormat(“H:| - [...足够吗?]添加的约束。对于这些可能愚蠢的问题抱歉,但我已经花了数小时,仍然不知道如何使用自动布局插入一个视图 –

相关问题