gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:45:21 46 4
gpt4 key购买 nike

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

  • 有标题栏
  • 透明标题栏
  • 全尺寸内容 View
  • 有阴影
  • 无纹理
  • 可以关闭、最小化、调整大小
  • 可随窗口背景移动

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

对于常规标题栏,双击可以照常工作。

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

我错过了什么?

最佳答案

子类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 的文档:

Typically, the area represented by this property is the same as the frame of the contentView. However, for windows with NSFullSizeContentViewWindowMask set, there needs to be a way to determine the portion that is not under the toolbar. The contentLayoutRect property contains the portion of the layout that is not obscured under the toolbar. This property is KVO compliant.

关于cocoa - 双击透明 NSWindow 标题不会最大化窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52150960/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com