我一直在为这一天寻找解决方案。
我有4个NSTextFields(实际上是一些自定义操作的子类),它们共享相同的X位置。
问题是,有些人有不同的风格(浅色,普通,粗体),可能有不同的尺寸。
即使X原点相同,第一个字母总是有一些(始终不同的)左边距。
请参见图片:https://dl.dropbox.com/u/1977230/Screen%20Shot%202012-12-11%20at%2017.55.58.png
我想确保所有行都在同一点开始,比如左边的100px。
知道如何覆盖那种奇怪的填充吗?
干杯
答案 0 :(得分:6)
您所谈论的保证金我非常确定lineFragmentPadding
使用NSTextContainer
上的NSTextField
。
请参阅NSTextContainer参考:
这是文本布局教程中的一页:
在该文章中指出:
排字机在实际适合文字时进行最后一次调整 进入矩形。这个调整是少量固定的 NSTextContainer对象,称为行片段填充,其中 定义左边的线段矩形每一端的部分 空白。文本在行片段矩形内以此量插入 (矩形本身不受影响)。填充允许小规模 调整文本容器的边缘和周围的区域 孔并保持文本不直接邻接任何其他图形 显示在该地区附近。您可以从默认值更改填充 使用setLineFragmentPadding:方法的值。注意线条片段 填充不是表达边际的合适手段;你应该设置 NSTextView对象的文档边距或位置的大小和大小 文本边距的段落边距属性。
不幸的是,看起来NSTextField
的{{1}}和NSTextContainer
是私有且无法访问的,但看起来它们可以在NSLayoutManager
中访问:
如果你想要对这种功能进行微小的控制,那么你可能需要继承这个类。
答案 1 :(得分:2)
你看过CoreText吗?我认为它可以提供你正在寻找的设施。来自文档...
Core Text布局引擎专门设计用于简化文本布局操作并避免副作用。
您可以访问“字体指标”,这使您(从文档中)...
对于每种字体,字形设计者都提供一组称为度量的度量,它们描述字体中每个字形周围的间距。排字机使用这些指标来确定字形位置。字体指标是诸如上升,下降,前导,上限高度,x高度等参数。
编辑:
可能NSTextField
不是为你想要做的而设计的。 NSTextField
除了NSLayoutManager
之外还执行自定义布局。
您可能需要升级到NSTextView
,该NSLayoutManager
始终附加专用的NSLayoutManager
。 Apple有一些您可以使用NSTextView
和{{1}}搜索的示例项目。
答案 2 :(得分:1)
如果您使用NSTextField绘制简单的静态文本,请查看AppKit additions to NSString。使用sizeWithAttributes:
获取“文本”图片的大小。然后使用大小来计算绘图的rects。最后使用draw
方法之一来实际绘制文本。不要忘记sizeWithAttributes
的“圆”结果!它不是像素对齐的。
但是如果您需要绘制比简单标签更复杂的东西,请使用Core Text。您可以在twui source code中找到如何使用它的非常好的示例。