如何让文本在垂直方向上适应UILabel?

5

我知道有很多类似的帖子,但是我已经阅读了所有的帖子(据我所知),并没有看到我遇到的同样的问题。

我想让所有文本在标签中垂直显示。

让我解释一下——字体并不总是以相同的方式创建的,因此它们的总高度可能相同(例如24个点)。然而,升高线和降低线差别很大——一个字体可能大多数在基线上方,而另一个字体则大多数在基线下方。因此,相同的文本,使用不同的字体,可能不会始终显示在相同的视图/标签中。

例如,请参见下面的屏幕截图。

第一个是Helvetica-Bold 300pts。 第二个是Apple Gothic 300pts。

请注意Helvetica(以及许多其他字体)如何切掉“g”的底部(试试就会发现)。

Helvetica-Bold300

AppleGothic

所以我的问题是:我想能够看到整个文本,无论使用哪种字体。 如果可以在“Helvetica”示例中将文本向上移动(并居中)在标签中,它将解决我的问题。为了使它更容易,我只需要显示一行。

不幸的是,我看到的所有解决方案都没有涉及字体的降高线和升高线,并且想出如何在矩形内绘制文本而不被裁剪。请注意,各个帖子中的“VerticalAlignment”解决方案不能解决此特定问题。

有人有任何想法或解决方案吗?

1个回答

2
最简单的方法是子类化UILabel并利用NSString的 - (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode 方法,该方法在 NSString UIKit添加中找到。
您可以在子类中重写 - (void)setFont ,测试字体大小是否适合视图的矩形,并且如果它太大,则将其缩小直到适合。

谢谢,但我发布的图片已经是使用VerticalAlignment和sizetofit子类化的结果。字体大小不是问题——正如您所看到的,文本有足够的空间——只是没有正确对齐。 - wayneh
好的,但是看一下sizeWithFont方法,它会给你字符串的高度,如果你知道了这个,你就可以自己居中,然后用drawStringAtPoint方法绘制字符串。只需阅读链接 - 它会为您提供完成此操作所需的一切。 - sosborn
好的,我会检查一下并看看我能做些什么。 - wayneh

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