MAC开发--自定义NSStatusBar的样式

作者: 背靠背的微笑 | 来源:发表于2017-06-07 16:17 被阅读429次
状态栏样式截图

前言:我们常见的状态栏快捷入口的按钮,大多都是一个图标,简洁清晰。但是有些项目的需求,需要我们显示比较复杂的视图。下面就让我们看看怎么设置想上图上第二个样式的复杂状态栏视图,有什么需要注意的地方。

#import "AppDelegate.h"

#import "NSView+LoadNib.h"

#import "CustomerView.h"

@interface AppDelegate ()

@property (strong,nonatomic) NSStatusItem *item;

@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

// Insert code here to initialize your application

//获取系统单例NSStatusBar对象

NSStatusBar *statusBar = [NSStatusBar systemStatusBar];

//设置动态宽度的NSStatusItem对象

NSStatusItem *item = [statusBar statusItemWithLength:NSVariableStatusItemLength];

//设置自定义的view

NSView *customerView = [NSView loadWithNibNamed:@"CustomeView" owner:self loadClass:[CustomeView class]];

[item setView: customerView];

//保存到属性变量

self.item = item;

NSLog(@"%@",NSStringFromRect(item.view.bounds));

}

- (void)applicationWillTerminate:(NSNotification *)aNotification {

// Insert code here to tear down your application

NSStatusBar *statusBar = [NSStatusBar systemStatusBar];

//删除item

[statusBar removeStatusItem:self.item];

}

注意:
1、创建NSStatusItem对象的时候,要用动态宽度的NSVariableStatusItemLength,如果是使用NSSquareStatusItemLength,那宽度是系统默认的,不能自适应我们自定义view的宽度。
2、将自定义的customerView设置为NSStatusItem对象的view,就实现了状态栏view的自定义。
3、NSStatusItem对象要设置为强指针,否则会立即释放,只能看到闪一下就没有了。
4、系统状态栏的高度最大为22.

2017年08月08日追加补充

如何隐藏dock图标和菜单,只显示状态栏图标:

在info.plist中添加Application is agent (UIElement)属性,并且设置为YES。

相关文章

网友评论

  • 08ce95a348f5:你好,请问遇到过Mac os 10.11上面第一次弹出popover位置不对吗?第一次在左下角弹出,其他系统不会。
  • SmallTwo:很好

本文标题:MAC开发--自定义NSStatusBar的样式

本文链接:https://www.haomeiwen.com/subject/nocafxtx.html