有時候我們需要自定義titlebar,方法有二:其一,保留系統的titlebar,只是隱藏titlebar;其二,不使用系統的titlebar,完全自定義,但是會出現window四個角的圓角不顯示的問題。接下來就對每個方法進行詳細的分析。
方法一:保留系統的titlebar
1、新建一個工程,保留系統生成的titlebar,將標題按鈕去除。
2、在AppDelegate中將titlebar隱藏
self.window.titleVisibility = NSWindowTitleHidden;
3、什么都沒有,但是我們還是發現上邊有一個titlebar的區域,我們加入一個紅色背景視圖,讓效果更明顯。
NSView *view = [[NSView alloc] initWithFrame:self.window.contentView.bounds];
view.wantsLayer = YES;
view.layer.backgroundColor = [NSColor redColor].CGColor;
[self.window.contentView addSubview:view];
4、我們現在可以明顯看到,titlebar的區域還是存在,這樣并不是我們想要的。
所以我們要設置window的style,titlebar的顯示為透明
self.window.titlebarAppearsTransparent = YES;
self.window.styleMask = self.window.styleMask | NSWindowStyleMaskFullSizeContentView;
好,這樣我們就可以隨心所欲得在上面添加我們想要的內容了。
方法二:不使用系統的titlebar
1、新建一個工程,在xib里去除window的titlebar
titlebar的區域已經不在了,很好。但是細心的你就會發現,四邊的圓角也同時失效了,變成了直角。
2、同樣,為了方便看效果,我們增加一個紅色背景的視圖。
3、接下來我們對contentView進行切角,為了效果明顯一點,我們將半徑設置大一點。
self.window.contentView.wantsLayer = YES;
self.window.contentView.layer.frame = self.window.contentView.frame;
self.window.contentView.layer.masksToBounds = YES;
self.window.contentView.layer.cornerRadius = 30.0;
4、這時候我們的圓角已經出來了,但是底部背景還是直角,我們將其window顏色設置為透明
并設置layer為白色底部,防止留有透明的空隙。
self.window.backgroundColor = [NSColor clearColor];
self.window.contentView.layer.backgroundColor = [NSColor whiteColor].CGColor;
好,這樣我們就可以隨心所欲得在上面添加我們想要的內容了,而且圓角的半徑可以自由設置。