macos - 自动布局错误 - 无法同时满足约束

标签 macos cocoa autolayout swift2

这个问题与我之前提出的如何添加在单独的 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 的隐式自动调整大小掩码存在冲突。

两个选项:

  1. 通过关闭自动布局、更改蒙版并再次打开自动布局,将蒙版设置为 Interface Builder 中合适的内容,或者取消选中将自动调整大小蒙版转换为约束(如果有)。

  2. 以编程方式执行相同的操作,或者设置掩码

    view.autoresizingMask = [...]
    

    或禁用translatesAutoresizingMaskIntoConstraints

    view.translatesAutoresizingMaskIntoConstraints = false
    

关于macos - 自动布局错误 - 无法同时满足约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34758795/

相关文章:

macos - 如何配置 Swing JFrame 以在 Cmd-W 上关闭?

ios - 如何使用和调试不存在模拟器的 iOS 版本?

objective-c - 在 Obj-C 中,如何以编程方式设置 Mac OS X 中文件的默认 "open with"属性

ios - 在纵向和横向中为 UIView 设置适当的约束

ios - 使用Autolayouts,Storyboard中的Size Classes根据UICollectionView的大小设置UICollectionViewCell?

macos - 在 Mac 上使用带有通配符的 dnsmasq

每次保存文件时执行的 linux(和 OSX)shell 命令

xcode - 如何创建 cocoa 手势事件

iphone - 如何在 Xcode 中批量抑制编译器警告

iOS:使用 UIViewControllerTransitioningDelegate 扩展 View 时 UILabel 未居中