У меня возникли проблемы с разработкой «лучшего» способа рендеринга текста в приложении.Масштабирование текста в соответствии с iPhone
Мой главный вид состоит из точки зрения текста и дизайн приложения диктует несколько вещей:
- The (шрифт) размер текста должен быть динамичным
- Текст кадр должен быть сосредоточенные вертикально в представлении
- переносы должны быть автоматическими и только тогда, когда это необходимо (по возможности избегать)
на данный момент я использую UILabel и следующий код, чтобы попытаться угадать Оптимальный размер шрифта для использования количества текста:
txt = @"this is just some sample text";
mylabel.font = [self getFontForString:txt];
mylabel.adjustsFontSizeToFitWidth = YES;
mylabel.numberOfLines = 0;
[mylabel setText:txt];
И:
- (UIFont *) getFontForString:(NSString *)txt {
CGFloat textLength = txt.length;
CGFloat maxFontSize = 71;
CGFloat minFontSize = 27;
CGFloat newFontSize = 0;
NSArray *chunks = [txt componentsSeparatedByString:@" "];
NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"length" ascending:NO] autorelease];
NSArray *sortedChunks = [chunks sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
CGSize labelSize = theThingLabel.bounds.size;
CGSize projectedSize = [[sortedChunks objectAtIndex:0] sizeWithFont:[UIFont boldSystemFontOfSize:maxFontSize]];
if (projectedSize.width > labelSize.width) {
CGFloat percentageDifference = ((projectedSize.width - labelSize.width)/labelSize.width)*100;
if (percentageDifference > 50) {
newFontSize = ((minFontSize/percentageDifference)*100) - 10;
if (newFontSize < minFontSize) newFontSize = minFontSize;
} else {
newFontSize = ((percentageDifference/maxFontSize)*100) - 10;
if(newFontSize < (maxFontSize/2)) newFontSize = maxFontSize - abs(newFontSize);
}
} else {
if (textLength > 11 && textLength < 255) {
newFontSize = (maxFontSize - ((maxFontSize - minFontSize) * ((textLength- 11)/100)));
} else if (textLength <= 11) {
newFontSize = maxFontSize;
} else if (textLength >= 255) {
newFontSize = minFontSize;
}
}
return [UIFont boldSystemFontOfSize:newFontSize];
}
Это работает, в определенной степени, но часто падает, когда текст немного по длинной стороне, эти два примера показывают, что оказывает следующие строки:
- «короткий объем текста»
- «, по существу, больше количество текста, который я все еще хочу сделать хороший LY «.
Как вы можете видеть, как во втором примере (с гораздо более пространным текстом) существует целый ряд вопросов:
- Начальная вдова
- Отброшенной у
- Отсутствует «красиво».
Итак, имея в виду, какие у меня варианты, я открыт для перехода на использование coretext, если это правильное решение, но понятия не имеет, с чего начать, также возможно, что я сделал ошибка, которую я просто не вижу в моем коде «угадывание размера шрифта».
Любой вход, который вы могли бы предложить, был бы с благодарностью получен.
Большое спасибо!
Имел аналогичную проблему и [решил ее в некоторой степени] (http://stackoverflow.com/questions/4382976/multiline-uilabel-with-adjustsfontsizetofitwidth). Это решение не выполняет никаких переносов, но решает проблему, из-за которой 'sizeWithFont' внутренне обрезает строку перед вычислением размера. –
я отправил свой ответ и доступен по следующей ссылке [Calculae размер шрифта, чтобы поместиться в Rect с NSString] [1] [1]: http://stackoverflow.com/questions/4091115/iphone-sdk-calculate-max-font-size/11810409 # 11810409 – andyPaul