语境
让我们P
成为一个 NSPopover 并view
成为一个 NSView ,它是一个包含在P
.
我需要的
我想获取框架view
并将其转换为屏幕的坐标系。通常,您会这样做:
NSRect frameRelativeToWindow = [self convertRect:self.frame relativeToView:nil];
[self.window convertRectToScreen:frameRelativeToWindow];
但是,因为view
是在一个 NSPopover 中,所以它的window
属性是 nil 并且上面的方法会返回 NSZeroRect: [0, 0, 0, 0]
那么,如果视图位于 NSPopover 中,如何在屏幕坐标中获取视图的框架?
笔记:
- NSPopover 在屏幕上并且可见。
- 我试图将其框架转换为屏幕坐标的视图不是 NSPopover 或其 contentView 的直接子视图。有问题的视图实际上是 NSClipView 中的 NSScrollView 中的 NSTableView 中的 NSTableCellView 中的自定义 NSView。clipView 是 NSPopover 的 contentView 的直接子视图。
- 在普通的 NSWindow 中,您可以获取任何子视图并调用
[self window]
以获取包含的 NSWindow 对象。然而,在弹出窗口中这样做会返回 nil。