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

状态栏样式截图

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

#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。

你可能感兴趣的:(MAC开发--自定义NSStatusBar的样式)