iOS:水平缩放字体而不栅格化



Android提供了一个属性textScaleX,允许在保持字体高度的同时水平缩放文本。我将其广泛用于Android应用程序(特别是对于不如英语紧凑的语言),并希望在ios中找到类似的东西。

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

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

使用 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;

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

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

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

最新更新