在10.10 之后的版本会简单一下,
第一步, 给窗口添加Toolbar, 但删掉Toolbar中的所有内容, 取消Customizable(相当于禁用Toolbar自定义功能)
第二步,
//Swift
window.titleVisibility = .Hidden
//OC
[window setTitleVisibility:NSWindowTitleHidden];
第三步,子类化 NSTitlebarAccessoryViewController 用来自定义上面的按钮
第四步,
// Swift
titlebarController.layoutAttribute = .Left
window.addTitlebarAccessoryViewController(titlebarController)
// OC
[titlebarController setLayoutAttribute:NSLayoutAttributeLeft];
[window addTitlebarAccessoryViewController:titlebarController];
这样做完样式基本实现了, 但标题栏不透明, 没有磨砂效果
用下面的方法在 windowDidLoad里 给 titlebar 加上透明背景
// Swift
guard let themeView = window.contentView?.superview else {
return
}
if themeView.subviews.count < 2 { return }
let titlebarView = themeView.subviews[1].subviews[0]
titlebarView.autoresizesSubviews = true
var rect = titlebarView.bounds
rect.origin.y = 0.5
let backgroundView = NSVisualEffectView(frame: rect)
backgroundView.material = .Titlebar
titlebarView.addSubview(backgroundView, positioned: .Below, relativeTo: nil)
backgroundView.autoresizingMask = [.ViewMinXMargin, .ViewMaxXMargin, .ViewWidthSizable, .ViewMinYMargin, .ViewMaxYMargin, .ViewHeightSizable]
效果图: