在High Sierra 10.13上,我有一个NSWindowController的子类,其子窗口的配置如下:
问题是当用户双击标题栏时,窗口无法缩放或最小化。
使用常规标题栏,双击可以照常工作。
我看到许多具有类似NSWindow配置的应用程序都支持双击(例如Safari)。
我想念什么?
答案 0 :(得分:0)
子类NSWindow
并使用contentLayoutRect
属性来计算titleBar矩形。如果双击在该矩形内,则触发缩放。
这是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的框架相同。但是,对于设置了NSFullSizeContentViewWindowWindow的窗口,需要一种方法来确定不在工具栏下方的部分。 contentLayoutRect属性包含在工具栏下未被遮盖的部分布局。此属性符合KVO。