3

正如其他地方所讨论的,NSTabView 没有 setBackgroundColor 方法,并且子类化 NSTabView 并使用 drawRect 来控制它不再起作用 - 因为它没有绘制前 10%,即分段控制按钮下方的位。

现在我对解决这个问题的工作量感到有点惊讶;看

我想知道我是否走错了路。以及如何更好更简单地做到这一点:

  • NSSegmentStyleTexturedSquare 似乎为我提供了一个半透明的分段控件。这意味着我需要做额外的工作来隐藏任何边框线(第 240、253 行)。

    • 有一个更好的方法吗 ?即否定它的透明度?

    • 或者有没有办法可以使用实际/原始分段选择按钮?

  • 我发现我需要的颜色——比如 [NSColor windowBackgroundColour] 没有设置为任何有用的颜色(即那个是透明的)——所以现在我对它们进行硬编码(第 87、94 行)。

    • 有一个更好的方法吗 ?
  • 我发现我需要一大堆蓬松的方法来保持同步(第 128、134 行等)。

    • 这可以避免吗?
  • 我发现模仿重新缩放的聪明才智意味着我需要时刻关注分段控制框并删除/调整它的大小。即便如此 - 它并不像原来的那么好

    • 有没有比第 157 行更好的方法 - 即听说调整大小?而不是一直这样做?
  • 当焦点从窗口中移开时,segementControl 会变暗——这与真正的 McCoy 不同。

    • 可以很容易地预防吗?有没有便宜的方法来跟踪这个?
  • 或者这是错误的方法 - 我应该在这里只关注一个透明的洞 - 让 NSTabViewItem 绘制背景?但无论如何 - 那么我仍然有分段控制框的问题 - 或者有没有办法让它再次成为默认值。

    • 尝试此操作时-我卡在以“真实”窗口背景颜色(即“透明”)绘制的前20-30个像素上-因此颜色不会一直运行到顶部或段栏后面,并且直到边框 - 而是在段控件底部下方停止大约 8 个像素。

反馈表示赞赏 - 因为对于这样一个简单的事情来说,这感觉太离谱/次优 - 非常感谢。黑客/分叉 github 代码的布朗尼点 :) :) :) 正如一行运行代码所说的超过一千个单词。

德。

4

3 回答 3

1

PSMTabBarControl 可能是最适合您的解决方法。我已经创建了几个自定义选项卡视图,但可可不能很好地使用这个控件。PSMTabBarControl 已更新以支持 Xcode 4。https://github.com/ciaran/psmtabbarcontrol

于 2012-01-09T16:58:20.120 回答
0

您是否尝试过设置其底层 CALayer 的背景颜色?(如果还没有,则通过设置 wantLayer = YES 使其成为一个支持图层的视图。)

于 2015-06-01T21:29:48.657 回答
0

如果您的情况可以容忍一些脆弱性,一个非常简单快捷的方法是子类化NSTabView并手动调整项目子视图的框架。这为每个项目提供了无缝的黄色背景:

- (void)drawRect:(NSRect)dirtyRect {
    static const NSRect offsetRect = (NSRect) { -2, -16, 4, 18 };

    NSRect rect = self.contentRect;

    rect.origin.x += offsetRect.origin.x;
    rect.origin.y += offsetRect.origin.y;
    rect.size.width += offsetRect.size.width;
    rect.size.height += offsetRect.size.height;

    [[NSColor yellowColor] set];
    NSRectFill(rect);

    [super drawRect:dirtyRect];
}

未来的指标变化NSTabView显然会成为一个问题,因此请自行承担风险!

于 2015-10-03T08:49:07.563 回答