使用自定义字体的UILabel渲染错误

6
在我的iPhone应用程序中,我为所有UILabel设置了自定义字体(更精确地说,我子类化了UILabel,覆盖了一个方法,在该方法中设置了自定义字体,然后将所有标签设置为该自定义类)。现在的问题是,所有文本的渲染位置都比预期的基线低得太多,因此像“y”和“g”这样的字母会被截断。我在这里阅读了类似问题的解决方案: UIButton custom font vertical alignment Custom installed font not displayed correctly in UILabel 然后,我尝试按照那些解决方案中描述的方式调整上升高度(最初设置为990)。将其设置为大约500可以得到良好的结果,但不久之后,我注意到多行文本中的行被混合在一起,这当然是不可接受的。在UITextView中,该字体似乎以初始基线正常渲染。
有没有解决这个问题的实用方法?当然,我可以为单行或多行文本保留不同上升高度的几种字体,但这是一个相当混乱的解决方案...

PS:字体以otf格式提供,尽管我尝试将其转换为ttf,但结果相同。

1个回答

6

好的,如果有人感兴趣的话,我想到了一个解决方法,应该适用于我。它只是简单地覆盖了UILabeldrawTextInRect方法,修改给定的矩形并将其传递给超类方法。

- (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); [super drawTextInRect:newRect];
}
- kgibbon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接