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