我想将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)]
];
但是我得到一条错误消息,似乎表明交叉视图约束是不可能的:“约束引用了视图子树之外的东西” 有没有办法做到这一点?
我发现一种解决方法是不使用约束,而是在按钮左侧插入自定义视图(不是间隔符!)。然后,我可以更改该视图的大小以移动按钮......但是,这似乎更像是对我的黑客攻击。
答案 0 :(得分:1)
我知道它有点旧,但我遇到了同样的问题,并找到了答案:
您必须使用topLayoutGuide
属性。
ex in swift
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormats(
["H:|[toolbarShadow]|", "V:[topLayoutGuide][toolbarShadow(100)]"],
views: viewDictionnary))
当然topLayoutGuide
必须在您的查看词典中
您可以通过self.topLayoutGuide
答案 1 :(得分:1)
我遇到了同样的问题。
与OS X 10.11 El Capitan一样,我们可以使用NSLayoutGuide
。
首先,您应该引用NSView
子类的实例,以便在" current"中对齐。源代码文件。在这种情况下,您的splitview中的子视图。
以下示例说明如何使用NSLayoutAnchor
对齐两个视图。
您还可以向工具栏项添加垂直约束。
- (void) setUpToolbarItemConstrains {
// the view you want your toolbaritem to align to
NSView * refView = self.theOtherView.view;
// theToolbarItem is the outlet to the ToolbarItem
NSView * toolsView = self.theToolbarItem.view;
// You can also do this in Interface Builder
self.theToolbarItem.minSize = CGSizeMake(200.0f, 0.0f);
self.theToolbarItem.maxSize = CGSizeMake(600.0f, 100.0f);
toolsView.translatesAutoresizingMaskIntoConstraints = NO;
[toolsView.leadingAnchor constraintEqualToAnchor: refView.leadingAnchor].active = YES;
}
但是,我有extended question与此相关。