错误呈现自定义字体的 UILabel

Posted

技术标签:

【中文标题】错误呈现自定义字体的 UILabel【英文标题】:UILabel with custom font wrongly rendered 【发布时间】:2012-04-02 05:30:40 【问题描述】:

在我的 iPhone 应用程序中,我为所有 UILabel 设置了自定义字体(更准确地说,我将 UILabel 子类化,覆盖了一个方法,在该方法中设置自定义字体,然后将 IB 中的所有标签设置为该自定义类)。现在的问题是,所有文本都被渲染得太远低于预期的基线,所以像'y'和'g'这样的字母在下面被切断了。我在这里读到过类似的问题:

UIButton custom font vertical alignment

Custom installed font not displayed correctly in UILabel

然后我尝试按照这些解决方案中的描述摆弄上升器(最初设置为 990)。将其设置为 500 左右会产生良好的效果,但不久之后,我注意到多行文本中的行相互混合,这当然是不可接受的。在 UITextViews 上,字体似乎在初始基线上渲染得很好..

有解决这个问题的实用方法吗?当然,我可以为多行或单行文本保留几种具有不同升序的字体,但这是一个相当混乱的解决方案..

PS:字体以otf格式提供,虽然我尝试将其转换为ttf,导致相同的结果。

【问题讨论】:

【参考方案1】:

好的,以防万一有人感兴趣,我想出了一个适合我的解决方法。它只是覆盖UILabel 的方法drawTextInRect,修改给定的矩形并将其传递给超类方法。

- (void)drawTextInRect:(CGRect)rect 
    CGFloat pointSize = self.font.pointSize;

    CGRect newRect = CGRectMake(rect.origin.x, rect.origin.y - (0.25 * pointSize), rect.size.width, rect.size.height);

    [super drawTextInRect:newRect];

我可能不得不尝试 0.25 以外的其他值...

【讨论】:

我用过这个。 - (void)drawTextInRect:(CGRect)rect CGFloat pointSize = self.font.pointSize; CGRect newRect = CGRectMake(rect.origin.x, rect.origin.y + (0.2 * pointSize), rect.size.width, rect.size.height); [超级 drawTextInRect:newRect];

以上是关于错误呈现自定义字体的 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

Fabric.js 一些自定义字体以非常小的尺寸和错误的字体呈现

通过属性检查器使用 xcode 自定义字体

Xcode 6 大小类中的自定义字体大小无法与自定义字体一起正常工作

自定义字体无法在 Wordpress 上的其他计算机上呈现

iOS自定义字体[重复]

Android 中的自定义字体在不同 API 中的呈现方式不同