我想更改UIFont属性,如基线或上限。 我试图做的是创建一个字体,获取它的描述符,更改它的矩阵,然后重新创建字体,但我找不到一种方法来做到这一点。
你能解释一下这段代码运行后“size”为(width = 0,height = 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}];
答案 0 :(得分:1)
看起来代码中的以下行不会初始化矩阵对象:
UIFont *font = [UIFont fontWithName:@"Helvetica-Light" size:40];
UIFontDescriptor *descriptor = [font fontDescriptor];
CGAffineTransform matrix = descriptor.matrix;
CGAffineTransform
变量的所有参数都设置为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.3999,459.99997}
UPD:
descriptor.matrix
未设置,因为它只是UIFontDescriptor
类提供的可选参数中的一个属性,它在Apple Docs上的说法如何:
UIFontDescriptor对象提供了一种用a来描述字体的机制 属性字典。 ... ...属性字典中的所有属性都是可选的。
这意味着如果字体对象可以被其他参数描述,则无法设置某些参数。请参阅[UIFontDescriptor fontAttributes]
以获取所有可用的参数。
由于descriptor.matrix
未设置,因此CGAffineTransform
结构没有描述转换,并将其添加到适当的UIFont
对象中。
因此,如果要修改使用转换的字体对象,则必须手动设置矩阵。即矩阵应描述您想要应用于起始字体对象的修改。