2013-03-28 4 views
3

Оказывается, есть некоторые различия в реализации CoreText между ИОСОМ 5.1 и IOS 6, как вы можете видеть из этих двух скриншотов:Различия в Core-Text между ios 6 и ios 5.1?

ИОСА 6: enter image description here

прошивка 5: enter image description here

Во-первых, цвет текста применяется неправильно. Кажется, что на ios 5.1 kCTForegroundColorAttributeName требует, чтобы вы дали ему CGColor, тогда как на ios 6, пропуская его, UIColor хватит. Поэтому я решил проблему, изменив свой код на:

[attributes setObject:(id)[color CGColor] 
       forKey:(NSString*)kCTForegroundColorAttributeName]; 

Во-вторых, интервал абзаца немного выключен. Расстояние между «прицелом» и «согласно» равно 11px против 25px (измеряется на снимке экрана). В обоих случаях интервал между абзацами установлен 5:

NSMutableData *styleSettingsArray = [NSMutableData data]; 
CGFloat spaceBefore,spaceAfter; 
... 
CTParagraphStyleSetting styleSettingB = {kCTParagraphStyleSpecifierParagraphSpacingBefore ,sizeof(CGFloat),&spaceBefore}; 
CTParagraphStyleSetting styleSettingA = {kCTParagraphStyleSpecifierParagraphSpacing   ,sizeof(CGFloat),&spaceAfter}; 
[styleSettingsArray appendBytes:&styleSettingB length:sizeof(styleSettingB)]; 
[styleSettingsArray appendBytes:&styleSettingA length:sizeof(styleSettingA)]; 
... 
if(styleSettingsArray.length > 0) 
{ 
    CTParagraphStyleRef paragraphStyleRef = CTParagraphStyleCreate([styleSettingsArray bytes], [styleSettingsArray length]/sizeof(CTParagraphStyleSetting)); 
    [dictionary setObject:(__bridge id)(paragraphStyleRef) forKey:(NSString*)kCTParagraphStyleAttributeName]; 
    CFRelease(paragraphStyleRef); 
} 

Описание paragraphStyleRef в консоли:

iOS 6: 
CTParagraphStyle: 
base writing direction = -1, alignment = 3, line break mode = 0, default tab interval = 0 
first line head indent = 0, head indent = 0, tail indent = 0 
line height multiple = 0, maximum line height = 0, minimum line height = 0 
line spacing adjustment = 0, paragraph spacing = 5, paragraph spacing before = 5 


iOS 5: 

CTParagraphStyle: 
writing direction = -1, alignment = 3, line break mode = 0, default tab interval = 0 
first line head indent = 0, head indent = 0, tail indent = 0 
line height multiple = 0, maximum line height = 0, minimum line height = 0 
line spacing adjustment = 0, paragraph spacing = 5, paragraph spacing before = 5 

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

Так как я могу это исправить? Также есть ли другие вещи, о которых я должен знать, что может привести к тому, что текст будет отображаться по-разному?

EDIT: После некоторого исследования, он Turnes, что разница в пункте стайлинга был на самом деле вызваны моей линии разрывов, которые напечатанных «\ г \ п». Изменение этого параметра на «\ n» позволило решить проблему с интервалом.

ответ

7

Core Text получил капитальный ремонт в iOS 6. Вы проверяете все изменения, просматривая видеоролики WWDC 2012, которые доступны бесплатно, если у вас есть учетная запись Apple Developer.

Итак, теперь в iOS 6 вы не можете использовать любые низкоуровневые атрибуты основного текста, такие как kCTForegroundColorAttributeName или kCTParagraphStyleAttributeName.

Вместо этого использовать новый набор атрибутов высокого уровня, как NSForegroundColorAttributeName & NSParagraphStyle.

Так что ваш код изменится на:

/*Note that you have use the Foundation class 
    for the attribute value instead of it's Core-Foundation counterpart.*/ 

[attributes setObject:color 
      forKey:NSForegroundColorAttributeName]; 

CGFloat spaceBefore, spaceAfter; 

NSMutableParagraphStyle *mutableParagraphStyle = [NSMutableParagraphStyle defaultParagraphStyle]; 
mutableParagraphStyle.paragraphSpacing = spaceAfter; 
mutableParagraphStyle.paragraphSpacingBefore = spaceBefore; 

[attributes setObject:mutableParagraphStyle 
      forKey:NSParagraphStyleAttributeName]; 

Вы можете найти документацию для все новые атрибуты здесь: http://developer.apple.com/library/ios/#documentation/uikit/reference/NSAttributedString_UIKit_Additions/Reference/Reference.html

+0

очень полезная информация, +1, даже если он не отвечает вопрос . –

+0

Вопрос в том, как вы можете исправить свой код, и если бы были другие вещи, которые могли бы привести к тому, что ваш текст будет отображаться по-разному. Этими вещами являются новые атрибуты, вот и все. Существуют и другие отличия в Core Text между iOS 5.1 и iOS 6, но они только недавно добавлены API. Что, по-вашему, я забыл? –

+0

как NSParagraphStyle, так и kCTParagraphStyleAttributeName дали те же результаты на ios 6, но, конечно, вы не можете использовать NSParagraphStyle на ios 5.Я указал на то, что на самом деле вызвало проблему при редактировании моего вопроса (что было довольно глупым tbh - я получил свои конечные строки, смешанные между unix/windows), и я также наградил вас щедростью, так как ваш ответ полезен, но я не принял ответ, так как проблема была вызвана чем-то несвязанным ... –

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