Cocoa:如何重新定位Inspector Bar

时间:2014-01-13 20:40:55

标签: objective-c macos cocoa nstextview

我的应用有一个使用InspectorBar的NSTextView。但是,它只是坐在窗口的顶部:

enter image description here

我希望能够将它进一步放在黑暗的水平条上,目前这是一个NSImageView。 setFrame似乎没有任何效果。我怎么能这样做?

编辑:我正在努力修复别人的项目实施。如您所见,他们能够移动检查器栏,并且他们没有使用NSToolbar。所以一定是可能的。

enter image description here

以下是此人如何实现这一目标:

- (void) addStyleBar
{
    NSArray* subviews = [self.window.contentView superview].subviews;
    [self.styleBar removeFromSuperview];

    [subviews enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop)
    {
        if (![obj isKindOfClass: [MainView class]])
        {
            self.styleBar = obj;
        }
    }];

    [self.styleBar setFrame: NSMakeRect(300.0f, 2.0f, CGRectGetWidth(self.styleBar.frame), CGRectGetHeight(self.bounds))];

    [self addSubview: self.styleBar];
}

但这对我的项目没有任何影响。

编辑2:如果我添加这样的约束:

    [[self.leftColumnVC.textView.window.contentView superview] addConstraint:[NSLayoutConstraint constraintWithItem:inspectorBarView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:formattingBarBackground attribute:NSLayoutAttributeTop multiplier:1 constant:0 ]];

这里的formattingBarBackground是上面第一张图片中看到的深灰色条。如果我这样做,我会得到这个:

enter image description here

这很好,因为顶部的栏没有预留空间,通过迭代窗口的子视图,我仍然可以获得对NSInspectorBar的引用,所以它仍然存在,它只是不可见。它是否隐藏在formattingBarBackground图像视图后面?如果是这样我怎么能把它带到前面?

1 个答案:

答案 0 :(得分:1)

Inspector Bar位于窗口工具栏下方。所以你的问题来自于你的“iTunes”用户界面的实现。如果您要在NSToolbar中将其实现为NSToolbarItems,那么Inspector Bar会自动将其置于其下方。

There is no API to alter to the location of the Inspector Bar,这是你能做的最好的(没有实现你自己的检查栏)。