ios: 水平缩放字体而不光栅化

ios: scaling font horizontally without rasterising

Android 提供了 属性 textScaleX,它允许在保持字体高度的同时水平缩放文本。我在 Android 应用程序中广泛使用它(特别是对于不像英语那么紧凑的语言),并希望在 ios.

中找到类似的东西

显然,我可以将文本绘制到图形上下文并将其缩放为图像,但这似乎是一个相当笨拙的解决方案,它将所有文本项都转换为 ImageView-s。

是否有本地水平缩放文本的方法?例如,可能有一个选项可以根据系统字体创建自定义字体并更改负责文本宽度的参数。

您可以只缩放包含文本的 UILabel 或 UITextView:

UILabel *label = ...
label.transform = CGAffineTransformMakeScale(0.8,1); //reduced size in x direction by 20%

如果这还不够,你可以看看NSLayoutManger,那里可能有东西。

使用 UIFontDescriptormatrix 属性。

下面是一个示例,它在 self.label 中使用 UILabel 并将其字体设置为水平拉伸 1.3 倍。

UIFont* baseFont = self.label.font;
UIFontDescriptor *baseDescriptor = baseFont.fontDescriptor;
UIFontDescriptor *newDescriptor = [baseDescriptor fontDescriptorWithMatrix:
    CGAffineTransformMakeScale(1.3, 1.0)];
UIFont* newFont = [UIFont fontWithDescriptor:newDescriptor size:0.0];
self.label.font = newFont;