gpt4 book ai didi

iphone - UILabel 默认字距与 CATextLayer 不同

转载 作者:技术小花猫 更新时间:2023-10-29 10:39:20 24 4
gpt4 key购买 nike

我有一个带有字符串 'LA' 的 UILabel。我还有一个 CATextLayer,它在 NSAttributedString 中分配了相同的字符给它的 string 属性。 UILabel 中的字距调整明显不同于 CATextLayer。这是代码。

- (void)viewDidLoad
{
[super viewDidLoad];

//
// UILabel
//
UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 50, 280, 100)];
label1.text = @"LA";
label1.backgroundColor = [UIColor clearColor];
label1.font = [UIFont fontWithName:@"Futura" size:90.0];
[self.view addSubview:label1];

//
// CATextLayer
//
UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(20, 130, 280, 100)];
label2.backgroundColor = [UIColor clearColor];
CATextLayer *textLayer = [[CATextLayer alloc] init];
textLayer.frame = label2.layer.bounds;
textLayer.contentsScale = [[UIScreen mainScreen] scale];
[label2.layer addSublayer:textLayer];
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"LA"];
CTFontRef aFont = CTFontCreateWithName((__bridge CFStringRef)@"Futura", 90.0, NULL);
[string addAttribute:(NSString*)kCTFontAttributeName value:(__bridge id)aFont range:NSMakeRange(0, [string length])];
textLayer.string = string;
[self.view addSubview:label2];
}

这是 an image的结果。

为什么这两种方法的字距调整不同,我在 CATextLayer 示例中做错了什么?

最佳答案

UIKit 通常使用 WebKit 进行文本渲染(如 this crash log) 中所示,很可能是出于性能原因。如果您真的需要超精度,那么有一些 custom UILabel reimplementations 使用 CoreText 作为其后端。

编辑:从 iOS7 开始,这不再是真的,因为 UILabel 使用 TextKit 进行渲染,它也基于 CoreText。

关于iphone - UILabel 默认字距与 CATextLayer 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10477096/

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