2012-04-15 3 views
0

Я отображая эту строку (обратите внимание на разрывы):CoreText добавляет дополнительное пространство к линии лас каждого пункта

CONSEJO 
NACIONAL 
PARA LA 
CULTURA 
Y LAS ARTES 

Я настроенная NSAttributedString иметь высоту строки постоянная до 26 точек с использованием код предложил яблоком here:

CGFloat lineSpacing = 26; 
CTTextAlignment theAlignment = kCTLeftTextAlignment; 

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

Но есть дополнительное место на последней строке:

Если я вручную добавить пробелов между словами, которые я получаю ожидаемый результат, поэтому при печати:

CONSEJO   NACIONAL     PARA LA                CULTURA               Y LAS ARTES 

Это показывает, что это (Обратите внимание, что нет никакого дополнительного разноса на последнюю строке):

Это не устойчивое решение, так как я не хочу вручную менять все строки, чтобы добавить пробелы на основе размера фрейма.

Я тестировал в течение нескольких месяцев, и я не смог это решить, последняя строка всегда получает больше места.

Я также экспериментировал с «\ г», чтобы увидеть, если это имеет разные результаты, но он все еще добавляет дополнительное пространство, отображая:

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

Произведено:

[Влево, используя \ г] [ Право, используя Пробелы]

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

[Здесь все синие блоки имеют одинаковый размер]

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

Таким образом, есть меньше места, но есть еще больше, чем должно быть.

CoreText должен иметь возможность обрабатывать простую строку, подобную этой.

Добавление пробелов - это не достаточно хорошо (по нескольким причинам), должен быть способ получить это под контролем.

Как вы думаете, в чем проблема?

ответ

0

Я не вижу изображения, но я думаю, что вы столкнулись с той же проблемой, с которой я недавно познакомился, см. this.

Вы можете использовать CTTypesetter и CTTypesetterSuggestClusterBreak для ручных разрывов вручную. Я использую размер шрифта как высоту строки, я добавляю строку, когда рисую строки вручную, и работает отлично.

Смежные вопросы