首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSStatusItem可以缩小到合适的尺寸吗?

NSStatusItem可以缩小到合适的尺寸吗?
EN

Stack Overflow用户
提问于 2011-02-14 05:34:48
回答 1查看 634关注 0票数 18

我有一个可变长度的NSStatusItem,我希望它尽可能保持可见,即使这意味着只显示一些内容,但当我的项目足够宽,可以进入应用程序的菜单栏时,它就完全隐藏了。有没有办法告诉我什么时候会发生这种情况,这样我就可以缩小视图以适应可用的空间?

我尝试了自定义视图,覆盖了所有的viewWill*方法、框架设置器和显示方法,并定期检查包含的窗口是否已移动或隐藏。我找不到任何方法来判断我的项目是否太长。

EN

回答 1

Stack Overflow用户

发布于 2014-01-28 06:24:56

下面是一个完整的基于hollow7引用的讨论的工作示例:

代码语言:javascript
复制
self.statusItem.title = @"Message that will be truncated as necessary.";
while (self.statusItem.title.length > 0) {
    CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenAboveWindow, (CGWindowID)self.statusItemWindow.windowNumber);
    if (CFArrayGetCount(windowList) > 1) {
        CFRelease(windowList);
        self.statusItem.title = [self.statusItem.title substringToIndex:self.statusItem.title.length - 1];
    } else {
        CFRelease(windowList);
        break;
    }
}

剩下的一个棘手的部分就是获取NSStatusItem窗口。到目前为止,我已经找到了两种获得它的方法。

1-有一个名为_window的私有方法。您可以像这样使用它:

代码语言:javascript
复制
self.statusItemWindow = [self.statusItem performSelector:@selector(_window)];

2-这有点复杂,但我认为这更有可能通过苹果对Mac App Store中私有方法使用的静态分析:

NSStatusItem的目标和操作设置为您控制的方法,如下所示:

代码语言:javascript
复制
self.statusItem.target = self;
self.statusItem.action = @selector(itemClicked:);

然后在调用的方法中访问该窗口:

代码语言:javascript
复制
- (void)itemClicked:(id)sender {
    self.statusItemWindow = [[NSApp currentEvent] window];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4987044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档