Оказывается, есть некоторые различия в реализации CoreText между ИОСОМ 5.1 и IOS 6, как вы можете видеть из этих двух скриншотов:Различия в Core-Text между ios 6 и ios 5.1?
ИОСА 6:
прошивка 5:
Во-первых, цвет текста применяется неправильно. Кажется, что на 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» позволило решить проблему с интервалом.
очень полезная информация, +1, даже если он не отвечает вопрос . –
Вопрос в том, как вы можете исправить свой код, и если бы были другие вещи, которые могли бы привести к тому, что ваш текст будет отображаться по-разному. Этими вещами являются новые атрибуты, вот и все. Существуют и другие отличия в Core Text между iOS 5.1 и iOS 6, но они только недавно добавлены API. Что, по-вашему, я забыл? –
как NSParagraphStyle, так и kCTParagraphStyleAttributeName дали те же результаты на ios 6, но, конечно, вы не можете использовать NSParagraphStyle на ios 5.Я указал на то, что на самом деле вызвало проблему при редактировании моего вопроса (что было довольно глупым tbh - я получил свои конечные строки, смешанные между unix/windows), и я также наградил вас щедростью, так как ваш ответ полезен, но я не принял ответ, так как проблема была вызвана чем-то несвязанным ... –