objective-c – 对齐工具栏项以拆分视图内容未使用自动布局约束

我想将os x app的工具栏中的按钮与窗口中的拆分视图的位置对齐,类似于Apple Mail中的删除按钮.如何使用自动布局约束来完成?

我确实在苹果文档中找到了一个提示,根据该提示,应该可以使用自动布局约束(在https://developer.apple.com/library/ios/documentation/userexperience/conceptual/AutolayoutPG/AutoLayoutConcepts/AutoLayoutConcepts.html),其中“约束可以通过一些限制跨越视图层次结构.”在OS X中的Mail应用程序中,例如,默认情况下,工具栏中的“删除”按钮与消息表“对齐”.但不幸的是,我找到了所有这些.

我试图在左侧splitView窗格的内容和按钮之间创建一个约束:

NSView *button = self.toolbarItemButton.view;
NSView *leftPane = self.leftSplitContent;

[self.window.contentView addConstraints:[NSLayoutConstraint
    constraintsWithVisualFormat:@"[leftPane][button]"
    options:0 metrics:nil
    views:NSDictionaryOfVariableBindings(leftPane, button)]
];

但是我得到一条错误消息,似乎表明交叉视图约束是不可能的:“约束引用了视图子树之外的东西”
有没有办法做到这一点?

我找到的解决方法是不使用约束,而是在按钮的左侧插入自定义视图(不是间隔符!).然后,我可以更改该视图的大小以移动按钮……但是,这似乎更像是对我的黑客攻击.

最佳答案 我知道它有点旧,但我有同样的问题,并找到了答案:

您必须使用topLayoutGuide属性.

急速前行

view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormats(
        ["H:|[toolbarShadow]|", "V:[topLayoutGuide][toolbarShadow(100)]"], 
views: viewDictionnary))

当然topLayoutGuide必须在你的视图词典中

您可以通过self.topLayoutGuide访问它

点赞