CoreText中的行间距和段落对齐方式

时间:2011-03-15 14:08:37

标签: iphone cocoa cocoa-touch ipad core-text

我正在使用CoreText呈现多列文本。但是,当我将第1段的第一个字母设置为比文本的其余部分更粗体,更大的字体时,我会产生2个问题(在附图中都可见):

  1. 第一行下面的间距太大(我明白这是因为第一个字符可能是g,y,p,q等。

  2. 第一行下方的行现在不与下一列中的相应行对齐。

  3. 非常感谢有关如何克服这两个问题的任何建议,谢谢。 enter image description here

2 个答案:

答案 0 :(得分:3)

根据文档kCTParagraphStyleSpecifierMaximumLineHeight应该已经解决了问题,但遗憾的是至少在IOS 4.3上似乎没有用。

CTParagraphStyleSetting theSettings[5] = 
{
    { kCTParagraphStyleSpecifierParagraphSpacing, sizeof(CGFloat), &spaceBetweenParaghraphs },
    { kCTParagraphStyleSpecifierParagraphSpacingBefore, sizeof(CGFloat), &topSpacing },
    { kCTParagraphStyleSpecifierLineSpacing, sizeof(CGFloat), &spaceBetweenLines },
    { kCTParagraphStyleSpecifierMinimumLineHeight, sizeof(CGFloat), &lineHeight},
    { kCTParagraphStyleSpecifierMaximumLineHeight, sizeof(CGFloat), &lineHeight}
};

CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(theSettings, 5);

公平的文档说它可以在OS v10.5及更高版本中使用。

kCTParagraphStyleSpecifierMaximumLineHeight
无论任何附加图形的字体大小或大小如何,框架中任何线条占据的最大高度。超过此高度的字形和图形将与相邻线重叠。最大高度为0表示没有行高限制。此值始终为非负。
类型:CGFloat。
默认值:0.0。
应用:CTFramesetter。
适用于Mac OS X v10.5及更高版本 在CTParagraphStyle.h中声明。

答案 1 :(得分:2)

似乎解决这个问题的唯一方法是使用一种解决方法,即为第一列创建3个帧,为W创建1个帧,为第一个句子的其余部分创建1个帧,为第一个列的其余部分创建1个帧。