Ios FontDescriptor矩阵不工作

Ios FontDescriptor矩阵不工作,ios,objective-c,uifont,Ios,Objective C,Uifont,我想更改UIFont属性,如基线或封口高度。 我试图做的是创建一种字体,获取它的描述符,更改它的矩阵,然后重新创建字体,但我找不到一种方法来实现它 在运行此代码后,您能否解释为什么“大小”为(宽度=0,高度=0): UIFont *font = [UIFont fontWithName:@"Helvetica-Light" size:40]; UIFontDescriptor *descriptor = [font fontDescriptor]; CGAffineTransform matri

我想更改UIFont属性,如基线或封口高度。 我试图做的是创建一种字体,获取它的描述符,更改它的矩阵,然后重新创建字体,但我找不到一种方法来实现它

在运行此代码后,您能否解释为什么“大小”为(宽度=0,高度=0):

UIFont *font = [UIFont fontWithName:@"Helvetica-Light" size:40];
UIFontDescriptor *descriptor = [font fontDescriptor];
CGAffineTransform matrix = descriptor.matrix;
descriptor = [descriptor fontDescriptorWithMatrix:matrix];
font = [UIFont fontWithDescriptor:descriptor size:40];

CGSize size = [@"bla bla" sizeWithAttributes:@{NSFontAttributeName:font}];

代码中的以下行似乎没有初始化矩阵对象:

UIFont *font = [UIFont fontWithName:@"Helvetica-Light" size:40];
UIFontDescriptor *descriptor = [font fontDescriptor];
CGAffineTransform matrix = descriptor.matrix;
cGraffeTransform
变量的所有参数都设置为0.0。您必须独立创建有效的矩阵。如果按以下方式更改代码,则会得到一个大小:

UIFont *font = [UIFont fontWithName:@"Helvetica-Light" size:40];
UIFontDescriptor *descriptor = [font fontDescriptor];
CGAffineTransform matrix = CGAffineTransformMake(10.0, 10.0, 10.0, 10.0, 1.0, 1.0);

descriptor = [descriptor fontDescriptorWithMatrix:matrix];
font = [UIFont fontWithDescriptor:descriptor size:40];
CGSize size = [@"bla bla" sizeWithAttributes:@{NSFontAttributeName:font}];

NSLog(@"%@", NSStringFromCGSize(size));
控制台日志为:{1222.3999459.99997}

UPD.:

descriptor.matrix
未设置,因为它只是类提供的可选参数中的一个属性,在Apple文档中是这样说的:

UIFontDescriptor对象提供了一种使用 属性字典。 ... …属性字典中的所有属性都是可选的

这意味着,如果字体对象可以由其他参数描述,则无法设置某些参数。请参见
[UIFontAttributes]
以获取所有可用参数

由于未设置
descriptor.matrix
,因此没有按结构描述并添加到相应
UIFont
对象的转换


因此,如果要使用转换修改字体对象,必须手动设置矩阵。也就是说,矩阵应该描述要应用于起始字体对象的修改。

但是为什么矩阵中的所有参数都是零?它来自字体本身。希望新的信息能有所帮助。这是一个很好的答案,我绝对震惊它没有更多的投票。干得好!