iphone - 带有自定义字体的 UILabel 错误呈现

标签 iphone ios xcode interface-builder custom-font

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

UIButton custom font vertical alignment

Custom installed font not displayed correctly in UILabel

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

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

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

最佳答案

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

- (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 以外的其他值...

关于iphone - 带有自定义字体的 UILabel 错误呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741222/

相关文章:

ios - 快速如何隐藏图像但仍然让它在堆栈 View 中占据空间

xcode - PackageMaker 错误无法将资源复制到 en.lproj

ios - objc_msgSend EXC_BAD_ACCESS 使用关闭按钮时

php - Array/Dict 从 Xcode 到 JSON 到 PHP 到 mySql

android - 移动应用程序是否有可能用其相机检测闪光灯,即视觉莫尔斯电码

iphone - 应用程序启动时如何检测何时触发电话调用?

iphone - 如何确定无效的 CFSocket

ios - 如何从 NSOperations 收集数据到数组中?

iphone - 更改 Interface Builder 创建的 UINavigationBar 的标题

ios - 如何使用 Swift 修复 iOS 应用程序上的 fatal error ?