首页 > 解决方案 > 我可以在其标签栏内获取 NSTabViewItem 的内容矩形吗?

问题描述

有没有办法在 aNSTabViewItem的栏中获取 a 的内容矩形NSTabView

当项目处于活动状态时,该view属性只是要显示的视图。

tabView属性为我提供了选项卡视图,但它的框架是选项卡视图使用的整个区域(包括当前显示的内容视图)。

我想将 aNSPopover完全对齐在特定的下方,NSTabViewItem但因此我需要它的内容矩形。

标签: macoscocoa

解决方案


不是直接的。没有典型的 API 来获取实际选项卡控件段的框架。如果您通过使用每个段的宽度估计框架来将选项卡视图的开关交换为 NSSegmentedControl,则可以粗略地做到这一点,但是仍然没有明确的方法来获取给定段的实际框架(直到该段被绘制的那一刻NSSegmentedCell)。

但是,您可以使用辅助功能 API 在选项卡视图中获取该段的矩形。这是一种非常愚蠢的做法,但这是可能的。

NSTabViewItem 由于某种原因不符合 NSAccessibility,但您可以使用旧的已弃用 API:

[tabViewItem accessibilityAttributeValue:NSAccessibilityPositionAttribute];
[tabViewItem accessibilityAttributeValue:NSAccessibilitySizeAttribute];

这些为您提供屏幕空间中的坐标,因此您需要将它们转换为窗口 (convertRectFromScreen) 和选项卡视图自己的框架 (convertRect:fromView:)。乏味但可行。


推荐阅读