NSTextFieldCell标准文本绘图位置

时间:2013-07-27 10:10:20

标签: objective-c cocoa nstextfieldcell

当你在drawInteriorWithFrame中调用[super drawInteriorWithFrame:cellFrame inView:controlView]时,有没有办法获取NSTextFieldCell中文本的位置:inView:?

1 个答案:

答案 0 :(得分:2)

文本矩形是titleRectForBounds:传递cellFrame的返回值,带有神秘的2px水平插入:

// this code ...
NSRect bounds = NSInsetRect(cellFrame, 2, 0); // dont ask me why
NSRect titleRect = [self titleRectForBounds:bounds];
[self.attributedStringValue drawInRect:titleRect];

// ... is equivalent to
[super drawInteriorWithFrame:cellFrame inView:controlView];

我不确定那些2px代表什么,它是通过尝试所有可能的文本字段配置从10.6到10.9预览的所有操作系统实验计算出来的。似乎总有这个无条件的2px插图。通过设置断点并查看调试器反汇编,可以很容易地确认默认实现是否通过这些参数调用NSInsetRect

我的猜测:为了更好的排版,需要2px插入以避免剪辑时启动或停止字母棒超出范围(放大并仔细观察W或A字母真正呈现的比较说H或P)。