4

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

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

4

1 回答 1

3

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

@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。

于 2013-10-18T17:40:20.000 回答