我想制作一个在深色背景上有浅色文本的自定义弹出菜单。我知道 的setView:
方法NSMenuItem
,我可以使用该方法使每个项目在深色背景上用浅色文本绘制。但是,NSMenu
在菜单的顶部和底部以浅色绘制 4 像素高的条带,这几乎破坏了外观。由于NSMenu
没有任何我可以覆盖的公共绘图方法,我看不出如何摆脱这些条带。
我看到NSMenu
标头具有名为noTopPadding
and的私有实例变量noBottomPadding
。太诱人了!
我找到了一个使用未声明方法的解决方案(显然不理想)。首先声明如下:
@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。