Cocoa 双击透明窗口标题不会使窗口最大化
在High Sierra 10.13中,我有一个子类NSWindowController,它的窗口配置如下:Cocoa 双击透明窗口标题不会使窗口最大化,cocoa,nswindow,Cocoa,Nswindow,在High Sierra 10.13中,我有一个子类NSWindowController,它的窗口配置如下: 有标题栏 透明标题栏 全尺寸内容视图 有阴影 没有纹理 可以关闭、最小化、调整大小 可通过窗口背景移动 问题是当用户双击标题栏时,窗口无法缩放或最小化 在常规标题栏中,双击与往常一样有效 我看到许多具有类似NSWindow配置的应用程序都支持双击(例如Safari) 我缺少什么?子类NSWindow,并使用contentLayoutRect属性计算标题栏矩形。然后,如果双击位于该矩形
- 有标题栏
- 透明标题栏
- 全尺寸内容视图
- 有阴影
- 没有纹理
- 可以关闭、最小化、调整大小
- 可通过窗口背景移动
我缺少什么?子类
NSWindow
,并使用contentLayoutRect
属性计算标题栏矩形。然后,如果双击位于该矩形内,则触发缩放
以下是Swift 5中的代码:
import Cocoa
class MyWindow: NSWindow {
override func mouseUp(with event: NSEvent) {
if event.clickCount >= 2 && isPointInTitleBar(point: event.locationInWindow) { // double-click in title bar
self.performZoom(nil)
}
super.mouseUp(with: event)
}
fileprivate func isPointInTitleBar(point: CGPoint) -> Bool {
if let windowFrame = self.contentView?.frame {
let titleBarRect = NSRect(x: self.contentLayoutRect.origin.x, y: self.contentLayoutRect.origin.y+self.contentLayoutRect.height, width: self.contentLayoutRect.width, height: windowFrame.height-self.contentLayoutRect.height)
return titleBarRect.contains(point)
}
return false
}
}
为完整起见,以下是contentLayoutRect
的文档:
通常,此属性表示的区域与contentView的框架相同。但是,对于设置了NSFullSizeContentViewWindowMask的窗口,需要有一种方法来确定不在工具栏下的部分。contentLayoutRect属性包含未在工具栏下隐藏的布局部分。此属性与KVO兼容
我在莫哈韦也看到了同样的情况。你能解决这个问题吗?@prabhu不,对不起。我编写了一些代码来检测双击和缩放窗口,但后来我没有使用它,因为我将窗口样式更改为不透明的标题栏。感谢您共享此片段!