我想将 os x 应用程序工具栏中的按钮与窗口中 Split View的位置对齐,类似于 Apple Mail 中的删除按钮。这如何使用自动布局约束来完成?
我确实在 apples 文档中找到了一个提示,据此应该可以使用自动布局约束(在 https://developer.apple.com/library/ios/documentation/userexperience/conceptual/AutolayoutPG/AutoLayoutConcepts/AutoLayoutConcepts.html ),其中说“约束可以,有一些限制,跨越 View 层次结构。在邮件中例如,OS X 中的应用程序,默认情况下,工具栏中的删除按钮与消息表对齐”。但不幸的是,我只能找到这些。
我试图在左侧 splitView Pane 的内容和按钮之间创建约束:
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)]
];
但是我随后收到一条错误消息,似乎表明跨 View 约束是不可能的:“约束引用了 View 子树之外的内容” 有什么办法吗?
我发现的解决方法是不使用约束,而是在按钮左侧插入一个自定义 View (不是间隔器!)。然后我可以更改该 View 的大小以移动按钮...但是,这对我来说更像是一种 hack。
最佳答案
我知道它有点旧,但我遇到了同样的问题并找到了答案:
您必须使用 topLayoutGuide
属性。
快速执行
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormats(
["H:|[toolbarShadow]|", "V:[topLayoutGuide][toolbarShadow(100)]"],
views: viewDictionnary))
当然topLayoutGuide
必须在你的 View 字典里
您可以通过self.topLayoutGuide
访问它
关于objective-c - 使用自动布局约束将工具栏项目对齐以 Split View内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23974865/