ios – UILabel的行间距,单行文本

前端之家收集整理的这篇文章主要介绍了ios – UILabel的行间距,单行文本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否预期具有自定义lineSpacing属性的多行UILabel即使标签的文本适合一行,也会包含该行间距?

这是我的标签

let label = UILabel()
label.numberOfLines = 4
var paragraph = NSMutableParagraphStyle()
paragraph.lineSpacing = 5
paragraph.lineBreakMode = .ByTruncatingTail
label.attributedText = NSAttributedString(string: "Some short text",attributes: [NSParagraphStyleAttributeName: paragraph])

这里是如何布局的.请注意文本下面的附加间距.

为了比较:

奇怪的是缺乏一致性.当标签延伸到第二行时,底线不再包括此额外的间距:

当有一行文本时,有没有办法删除这个行间距?还是以其他一些方式强制执行一些一致性,所以我至少可以解释一下呢?

更新

基线计算也似乎不合.当尝试将视图(这里,红色框)与标签的基线对齐时,多行标签被部分覆盖.


解决方法

既然你说你使用了一个自定义的字体,那么根据以前的经验,我最好的猜测是你看到的那个问题的根本原因在于自定义字体本身.每当客户端给定一个自定义字体时,90%的时间内,实际的字体指标(由Apple内部字体渲染子系统解释,即使它可能会在其他地方正确渲染)出现“错误”.

好消息是,这是可修复的,但它需要使用新的指标来重新构建字体,这通常是一个试验/错误的事情.您可能还需要检查您的字体的许可证是否允许这样的事情(如果甚至重要).

话虽如此,当我开始一个新的项目时,这些是一些关于这个确切情况的问题的资源:

这是一个类似的问题,假设这是一个自定义字体问题:“Custom UIFont baseline shifted”.这个问题在UIButton“UIButton custom font vertical alignment”中涉及这个问题,但是这两个问题最终都在这个问题的答案“Custom installed font not displayed correctly in UILabel”.

我有一个个人测试应用程序的自定义字体现在,我使用,当我第一次给定一个自定义字体.这允许我为每次重建迭代单独测试字体,以确保它完美呈现.确保测试各种字体大小,甚至是其他语言的更改(是的,很多排列).使用自定义字体时,我已经有泰国和中国的问题,因为它们的上升沿非常接近UILabel边界边缘.我为自己创建的测试平台包括以各种大小和各种大小的各种语言的基本UILabels呈现的字体(因为像我说过的,过去使用某些语言中的自定义字体呈现良好的体验在罗马字符).

如果有人有一个更好的解决方案,我很乐意听到它,因为我遇到这个问题与自定义字体几乎每一次.这是我的工作流程,我们在布局之前开始补偿字体的渲染问题,或者使用单独的属性字符串调整,来解决问题.我不是字体专家,我只是一个喜欢字体渲染的人,像内置的字体(特别是使用自动布局时).

猜你在找的iOS相关文章