CoreText为每个段落的最后一行添加了额外的空间

时间:2012-04-15 06:32:27

标签: iphone ios ipad core-text nsattributedstring

我正在显示这个字符串(请注意休息时间):

CONSEJO
NACIONAL
PARA LA
CULTURA
Y LAS ARTES

我已使用apple here建议的代码将NSAttributedString配置为线高不变为26磅:

CGFloat lineSpacing = 26;
CTTextAlignment theAlignment = kCTLeftTextAlignment;

CTParagraphStyleSetting theSettings[3] = 
{
    {kCTParagraphStyleSpecifierMaximumLineHeight, sizeof(CGFloat), &lineSpacing},
    {kCTParagraphStyleSpecifierMinimumLineHeight, sizeof(CGFloat), &lineSpacing},
    {kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), &theAlignment },
};

但是最后一行还有额外的空间:

如果我在单词之间手动添加SPACES,我会得到预期的结果,所以在打印时:

CONSEJO            NACIONAL                    PARA LA                                                                CULTURA                                                         Y LAS ARTES

它显示了这一点(注意最后一行没有多余的间距):

这不是一个可持续的解决方案,因为我不想手动更改所有字符串以根据帧大小添加空格。

我已经测试了几个月而且我无法解决这个问题,最后一行总是占用更多空间。

我还尝试过“\ r \ n”来查看这是否有不同的结果,但它仍然增加了额外的空间,显示:

Consejo\rNacional\rpara la\rCultura\ry las Artes

制作人:

[左侧使用\ r] [右侧使用SPACE]

http://dl.dropbox.com/u/11470523/Test.png

[此处所有蓝色块的大小相同]

http://dl.dropbox.com/u/11470523/TEsst1%20copy.png

因此空间较小,但仍有比应有的空间更多。

CoreText应该能够像这样处理一个简单的字符串。

添加空格是不够的(出于几个原因),必须有一种方法来控制它。

您认为问题是什么?

1 个答案:

答案 0 :(得分:0)

我无法看到图片,但我认为您遇到了我不久前遇到的同样问题,请参阅this

您可以使用CTTypesetterCTTypesetterSuggestClusterBreak手动处理换行符。我使用字体大小作为一行的高度,我在手动绘制线条时添加了行间距,并且它工作正常。