我想将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访问它