Mac開發--關于window的titleBar和圓角問題

有時候我們需要自定義titlebar,方法有二:其一,保留系統的titlebar,只是隱藏titlebar;其二,不使用系統的titlebar,完全自定義,但是會出現window四個角的圓角不顯示的問題。接下來就對每個方法進行詳細的分析。

方法一:保留系統的titlebar

1、新建一個工程,保留系統生成的titlebar,將標題按鈕去除。


去除標題按鈕

2、在AppDelegate中將titlebar隱藏

self.window.titleVisibility = NSWindowTitleHidden;


隱藏titlebar

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;


最后效果圖

好,這樣我們就可以隨心所欲得在上面添加我們想要的內容了,而且圓角的半徑可以自由設置。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在iOS中隨處都可以看到絢麗的動畫效果,實現這些動畫的過程并不復雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,147評論 5 13
  • //設置尺寸為屏幕尺寸的時候self.window = [[UIWindow alloc] initWithFra...
    LuckTime閱讀 838評論 0 0
  • 1、設置UILabel行間距 NSMutableAttributedString* attrString = [[...
    FF_911閱讀 1,426評論 0 3
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現這些動畫的過程并不復雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,573評論 6 30
  • 1、設置UILabel行間距 NSMutableAttributedString*attrString=[[NSM...
    iOS祎閱讀 2,222評論 0 0