【问题标题】:Not using Auto Layout, yet see 'Unable to simultaneously satisfy constraints' error未使用自动布局,但请参阅“无法同时满足约束”错误
【发布时间】:2015-03-01 01:26:54
【问题描述】:

我没有在我的任何 nib 文件中使用自动布局。我正在加载一个 NSViewController,然后手动将其视图添加到另一个 NSView。但是,当我这样做时,我看到了这个错误:

不能同时满足约束

这对我来说毫无意义,因为我没有在任何地方启用自动布局。我专门禁用了它。我可以控制正在加载的 NSViewController 以及我要添加它的视图的 NSView。我该怎么做才能解决这个问题?

【问题讨论】:

    标签: cocoa xcode6 autolayout


    【解决方案1】:

    在窗口级别启用(或不启用)自动布局。如果窗口中的任何 视图添加了约束或覆盖+requiresConstraintBasedLayout 以返回YES,则为窗口启用自动布局。任何未编码以参与自动布局的视图都可能会保留translatesAutoresizingMaskIntoConstraints,因此它们仍然可以像在弹簧和支柱窗口中一样工作。

    在某些情况下,Cocoa 可能会添加约束。某些 Cocoa 视图,例如 NSStackView,从 +requiresConstraintBasedLayout 返回 YES

    您是否正在使用窗口中的一些最新功能,例如标题栏附件?

    【讨论】:

    • 谢谢!是的,我正在使用“NSTitlebarAccessoryViewController”,如果这就是你的意思,为了伪造增加的窗口高度。我没有使用 NSStackView,只是将带有 NSOutlineView 的笔尖加载到主窗口中。你认为附件视图控制器是罪魁祸首吗?我检查了我所有的笔尖,它们将“translatesAutoresizingMaskIntoConstraints”设置为“NO”——是否应该全部设置为“YES”?
    • 一般来说,NIB 中的顶级视图应该将translatesAutoresizingMaskIntoConstraints (TAMIC) 设置为YES。一些控制器将加载 NIB 并将视图添加到视图层次结构中。如果该控制器是自动布局感知的,它会根据需要调整 TAMIC。如果该控制器不知道自动布局,那么您希望 TAMIC 设置为 YES 以防窗口使用自动布局,因此它的行为符合预期。对于窗口或顶级视图中的视图,如果 NIB 启用了自动布局,则 TAMIC 应为 NO,否则为 YES
    • 啊,我明白了。谢谢你,我会去重新打开它们,看看这是否能解决我的问题。
    • 是的,我确实怀疑NSTitlebarAccessoryViewController 启用了窗口的自动布局。例如,考虑它的layoutAttribute 属性,它使用自动布局术语和值来控制附件视图的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多