Cocoa控制文本位置?

Cocoa控制文本位置?,cocoa,baseline,Cocoa,Baseline,这是否可以获取在标准(非自定义)Cocoa控件中绘制的文本的坐标?实际上,我需要文本的基线,y轴偏移值(相对于视图框架矩形的y原点)。 这是当选择布局->显示布局矩形时界面生成器在设计窗格上显示的内容。不幸的是,没有一种解决方案适用于所有控件和单元格。您应该能够通过以下方法获得此信息的良好近似值: -[NSCell titleRectForBounds:] -[NSCell font] -[NSFont ascender] 下面是一些适用于NSButton/NSButtonCell的代码 NS

这是否可以获取在标准(非自定义)Cocoa控件中绘制的文本的坐标?实际上,我需要文本的基线,y轴偏移值(相对于视图框架矩形的y原点)。
这是当选择布局->显示布局矩形时界面生成器在设计窗格上显示的内容。

不幸的是,没有一种解决方案适用于所有控件和单元格。您应该能够通过以下方法获得此信息的良好近似值:

-[NSCell titleRectForBounds:]
-[NSCell font]
-[NSFont ascender]
下面是一些适用于NSButton/NSButtonCell的代码

NSRect titleRect = [[button cell] titleRectForBounds:[button bounds]];
CGFloat baseline = ceil(NSMinY(titleRect) + [[[button cell] font] ascender]);
此时,基线位于按钮的(边界)坐标空间中。您可能希望使用-[NSView convertPoint:toView:]将其转换为其他空间


此外,这里的“ceil”是一个近似值。并非所有控件都会这样做。有些可能是地板,或使用其他舍入功能。或者,他们可能会以完全不同的方式编排标题,而这种近似方法是行不通的。

要想正确处理,这可能是一件非常痛苦的事情。在Adobe Lightroom中,我们有自己的控件布局系统。对于验证文本的基线在何处绘制来说,一个真正有用的工具是使用poseAs添加一些调试代码,并插入一些全局绘制代码以覆盖在普通图形上。本质上,我们可以在调试构建中启用此选项,以显示基线在我们关心的所有控件上的位置。如果你做了很多这样的事情,最终会节省你的时间。由于专有性质,我无法共享任何代码,抱歉。poseAs:在Leopard中已被弃用;)