我听说我可以使用CoreText显示NSAttributedString,谁能说我怎么样(最简单的方法)?
请不要使用CATextLayer或OHAttributedLabel回答。
我知道在这个论坛中有很多关于此的问题,但我找不到答案
谢谢!
答案 0 :(得分:12)
最简单的方法?像这样:
CGContextRef context = UIGraphicsGetCurrentContext();
// Flip the coordinate system
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
// Create a path to render text in
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, self.bounds );
// An attributed string containing the text to render
NSAttributedString* attString = [[NSAttributedString alloc]
initWithString:...];
// create the framesetter and render text
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attString);
CTFrameRef frame = CTFramesetterCreateFrame(framesetter,
CFRangeMake(0, [attString length]), path, NULL);
CTFrameDraw(frame, context);
// Clean up
CFRelease(frame);
CFRelease(path);
CFRelease(framesetter);
答案 1 :(得分:11)
我认为最简单的方法(使用Core Text)是:
// Create the CTLine with the attributed string
CTLineRef line = CTLineCreateWithAttributedString(attrString);
// Set text position and draw the line into the graphics context called context
CGContextSetTextPosition(context, x, y);
CTLineDraw(line, context);
// Clean up
CFRelease(line);
如果您正在绘制大量文本,使用框架设置会更有效但如果您只需要显示少量文本(如标签)并且不需要您创建路径,这是Apple推荐的方法或框架(因为它是由CTLineDraw
自动完成的。)
答案 2 :(得分:0)
从ios 6开始,您可以执行以下操作:
NSMutableParagraphStyle *paragrahStyle = [[NSMutableParagraphStyle alloc] init];
[paragrahStyle setLineSpacing:40];
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragrahStyle range:NSMakeRange(0, [labelText length])];
cell.label.attributedText = attributedString ;