I want to make a custom pop-up menu that has light text on a dark background. I am aware of the setView:
method of NSMenuItem
, which I could use to make each item draw with light text on a dark background. However, NSMenu
draws 4 pixel high strips at the top and bottom of the menu in a light color, which pretty much ruins the look. Since NSMenu
doesn't have any public drawing methods I could override, I can't see how to get rid of those strips.
I see that the NSMenu
header has private instance variables named noTopPadding
and noBottomPadding
. So tantalizing!
I found a solution using an undeclared method (not ideal, obviously). First declare it as follows:
@interface NSMenu (secret)
- (void) _setHasPadding: (BOOL) pad onEdge: (int) whatEdge;
@end
Then, sometime before showing the menu, do:
if ([menu respondsToSelector: @selector(_setHasPadding:onEdge:)])
{
[menu _setHasPadding: NO onEdge: 1];
[menu _setHasPadding: NO onEdge: 3];
}
My testing shows that this doesn't work on Snow Leopard, but does work on Lion, Mountain Lion, and Mavericks.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With