双击透明NSWindow标题不会最大化窗口

问题描述 投票:2回答:1

在High Sierra 10.13上,我有一个NSWindowController的子类,可以像这样配置其窗口:

  • 具有标题栏
  • 透明标题栏
  • 完整内容视图
  • 有阴影
  • 未纹理
  • 可以关闭,最小化,调整大小
  • 可通过窗口背景移动

问题是,当用户双击标题栏时,窗口无法缩放或最小化。

使用常规标题栏,双击照常工作。

[我看到许多具有类似NSWindow配置的应用程序都支持双击(例如Safari)。

我想念什么?

cocoa nswindow
1个回答
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。

© www.soinside.com 2019 - 2024. All rights reserved.