gpt4 book ai didi

iPhone:可变长度的UILabel,多行字符串,多种字体

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:26:32 24 4
gpt4 key购买 nike

我想在带有 UILabel 的 iPhone 上做这样的事情:

John Doe, Jane Doe, John Smith,
简·史密斯
喜欢这张照片。

我可以绘制自己的文本并让它在同一行上实现多种字体,就像在 question here 中一样,但是一旦它跨越多行,这种解决方案似乎并没有真正起作用,因为 sizeWithFont:forWidth:lineBreakMode: 方法返回一个 CGRect,我会想象它要么做这样的事情:

John Doe, Jane Doe, John Smith, Jane Smith 喜欢这张照片。

或者像这样:

John Doe, Jane Doe, John Smith,
简·史密斯

喜欢这张照片。

但我想在第一种字体停止的地方并在同一行上继续第二种字体。有没有办法在 iPhone 上实现这一点?

最佳答案

我已经使用 Core Text 来处理这样的文本,以便在某些地方显示不同的字体。 Core Text 在更改字体、大小和设置段落属性方面为您提供了很大的灵 active 。有关核心文本的更多信息,请参见此处 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 来显示这样的文本(记住这会消耗更多的资源)

关于iPhone:可变长度的UILabel,多行字符串,多种字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6014985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com