在我的 Mac OS X 小型应用程序中,我在系统菜单栏中显示一些信息。我用的是
statusItem = [
[[NSStatusBar systemStatusBar]
statusItemWithLength:NSVariableStatusItemLength]
retain
];
它工作得很好,我可以用它来更改文本
[statusItem setTitle:[NSString stringWithString:@"Woo-hoo"]];
但它使用默认的菜单字体,对于我相对不重要的信息来说太大了。所以我决定用自定义 View 重新实现它。我在 Interface Builder 中创建了一个 View 。
但是不幸的是,当我将其设置为菜单项的 View 时
[statusItem setView:myView];
它只是在菜单中显示一个白色条,而不是我的东西。我尝试过
[statusItem
drawStatusBarBackgroundInRect:[myView frame]
withHighlight:NO];
没有成功。
在试图弄清楚问题是否出在 View 本身或我将其分配给菜单栏的方式时,我创建了一个窗口并执行了
[myTestWindow setContentView:myView];
这个工作顺利进行。这让我觉得我的观点是好的:-)
那么,我还可以尝试什么让菜单项显示我自己的 View ?
谢谢!
最佳答案
这恰好是 Interface Builder 中窗口 View 自动调整大小设置的一些奇怪的副作用(我们称之为尺寸效应)。在检查器中,您可以设置如何根据 super View 大小调整 subview 的大小。因此,在我的情况下,它在某种程度上被破坏了,这样当窗口变得足够小(menuitem-high)时,我的元素就被绘制在窗口框架之外。
我在 IB 中重新配置了大小调整,消除了所有不需要的自动设置,现在它工作得很好:IB 中的 View 显示在菜单项内。
关于Cocoa: [statusItem setView:myView] 无论如何都会创建一个白条菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/689513/