我可以删除自定义NSMenu的顶部和底部填充吗?

时间:2013-10-16 01:59:56

标签: macos cocoa nsmenu

我想制作一个在深色背景上有浅色文字的自定义弹出菜单。我知道setView:的{​​{1}}方法,我可以使用该方法在深色背景上使用浅色文字绘制每个项目。但是,NSMenuItem在菜单的顶部和底部以浅色绘制了4个像素高的条带,这几乎破坏了外观。由于NSMenu没有我可以覆盖的任何公共绘图方法,我无法看到如何摆脱这些条带。

我看到NSMenu标头有名为NSMenunoTopPadding的私有实例变量。太诱人了!

1 个答案:

答案 0 :(得分:2)

我找到了使用未声明方法的解决方案(显然不理想)。首先声明如下:

@interface NSMenu (secret)
- (void) _setHasPadding: (BOOL) pad onEdge: (int) whatEdge;
@end

然后,在显示菜单之前的某个时间,执行:

if ([menu respondsToSelector: @selector(_setHasPadding:onEdge:)])
{
    [menu _setHasPadding: NO onEdge: 1];
    [menu _setHasPadding: NO onEdge: 3];
}

我的测试表明,这不适用于Snow Leopard,但可以在Lion,Mountain Lion和Mavericks上使用。