iPhone: UILabel переменной длины, многострочные строки с несколькими шрифтами - PullRequest
2 голосов
/ 16 мая 2011

Я бы хотел сделать что-то подобное на iPhone с UILabel:

Джон Доу, Джейн Доу, Джон Смит,Джейн Смит нравится эта фотография.

Я мог бы нарисовать свой собственный текст и сделать так, чтобы он использовал несколько шрифтов в одной строке, как в вопросе здесь , но как только он занимает несколько строкТакое решение, похоже, на самом деле не работает, потому что метод sizeWithFont:forWidth:lineBreakMode: возвращает CGRect, и я мог бы себе представить, что можно сделать что-то вроде этого:

Джон Доу, ДжейнДоу, Джон Смит, Джейн Смит нравится эта фотография.

Или вот так:

Джон Доу, Джейн Доу, Джон Смит,Джейн Смит как эта фотография.

Но я бы хотел продолжить второй шрифт там, где остановился 1-й шрифт и на той же строке.Есть ли способ сделать это на iPhone?

Ответы [ 2 ]

1 голос
/ 05 февраля 2013

Существует способ установить разные / несколько шрифтов и другие свойства на Label, используя NSMutableAttributedString.Foll - мой код:

 UIFont *ArialFont = [UIFont fontWithName:@"arial" size:18.0];
 NSDictionary *arialdict = [NSDictionary dictionaryWithObject: ArialFont forKey:NSFontAttributeName];    
 NSMutableAttributedString *AattrString = [[NSMutableAttributedString alloc] initWithString:title attributes: arialdict];

 UIFont *VerdanaFont = [UIFont fontWithName:@"verdana" size:12.0];
 NSDictionary *veradnadict = [NSDictionary dictionaryWithObject:VerdanaFont forKey:NSFontAttributeName];
 NSMutableAttributedString *VattrString = [[NSMutableAttributedString alloc]initWithString: newsDate attributes:veradnadict];    
 [VattrString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:(NSMakeRange(0, 15))];

 [AattrString appendAttributedString:VattrString];


 lblText.attributedText = AattrString;

Обратите внимание, что lblText - это UILabel, выход в качестве владельца файла.Можно продолжать добавлять столько NSMutableAttributedString, сколько он хочет ..

Также обратите внимание, что я добавил шрифт verdana & arial в свой проект и добавил plist для этого.

1 голос
/ 16 мая 2011

Я использовал Core Text для обработки подобных текстов, чтобы отображать разные шрифты в определенных местах.Базовый текст дает вам большую гибкость в плане изменения шрифта, размера и настройки атрибутов абзаца.Более подробную информацию о базовом тексте можно найти здесь http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/CoreText_Programming/Introduction/Introduction.html

Чтобы дать вам пример того, как это делается:

-(void) drawLayer:(CALayer *)layerToDraw inContext:(CGContextRef)context {
NSMutableAttributedString* someString = [[NSMutableAttributedString alloc] initWithString:@"New String"];
CTFontRef font = CTFontCreateWithName(@"Arial", 25, NULL);
[someString addAttribute:(id)kCTFontAttributeName value:(id)font range:NSMakeRange(0, 3)];
CFRelease(font);

CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, labelLayer.bounds);

CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, labelLayer.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(someString);
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);

CTFrameDraw(frame, context);


CFRelease(framesetter);
CFRelease(frame);
CFRelease(path);
}

Но если в вашем проекте такого использования очень мало, выможно просто использовать UIWebView для отображения такого текста (помните, что это потребляет больше ресурсов)

...