Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 双击透明窗口标题不会使窗口最大化_Cocoa_Nswindow - Fatal编程技术网

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

Cocoa 双击透明窗口标题不会使窗口最大化,cocoa,nswindow,Cocoa,Nswindow,在High Sierra 10.13中,我有一个子类NSWindowController,它的窗口配置如下: 有标题栏 透明标题栏 全尺寸内容视图 有阴影 没有纹理 可以关闭、最小化、调整大小 可通过窗口背景移动 问题是当用户双击标题栏时,窗口无法缩放或最小化 在常规标题栏中,双击与往常一样有效 我看到许多具有类似NSWindow配置的应用程序都支持双击(例如Safari) 我缺少什么?子类NSWindow,并使用contentLayoutRect属性计算标题栏矩形。然后,如果双击位于该矩形

在High Sierra 10.13中,我有一个子类NSWindowController,它的窗口配置如下:

  • 有标题栏
  • 透明标题栏
  • 全尺寸内容视图
  • 有阴影
  • 没有纹理
  • 可以关闭、最小化、调整大小
  • 可通过窗口背景移动
问题是当用户双击标题栏时,窗口无法缩放或最小化

在常规标题栏中,双击与往常一样有效

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


我缺少什么?

子类
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不,对不起。我编写了一些代码来检测双击和缩放窗口,但后来我没有使用它,因为我将窗口样式更改为不透明的标题栏。感谢您共享此片段!