2012-02-03 33 views
5

我知道有很多类似于此的线程,但我已经阅读了所有这些(据我所知),并没有看到我遇到的同样的问题。强制文字垂直放入UILabel中?

我试图让所有的文本显示在标签VERTICALLY。

让我解释一下 - 字体并不总是产生同样的方式,因此而他们的总高度可以是相同的(24pts,例如)。然而,Ascender和Descender差别很大 - 一种字体可能大部分在基线以上,而另一种字体大多在基线以下。因此,具有不同字体的相同文本可能并不总是显示在相同的视图/标签中。

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

第一个是Helvetica-Bold 300pts。 第二个是苹果哥特式300pts。

公告的“G”的底部是如何切断与黑体(和许多其他的字体太 - 试试吧,你会看到)。

Helvetica-Bold300

AppleGothic

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

不幸的是,没有一个是我见过的解决方案涉及的伸和字体的字母上,并找出如何在矩形内绘制文本,而不是把它裁剪。请注意,各种线程中的“VerticalAlignment”解决方案不能解决此特定问题。

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

回答

2

最简单的方法是继承UILabel并使用NSString UIKit additions中的NSString的- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode方法。

你可以在你的sublcass中覆盖- (void)setFont,测试字体大小是否适用于视图的矩形,如果它太大,则使其更小,直到适合。

+0

谢谢,但我发布的图像已经是使用VerticalAlignment和'sizetofit'进行子类化的结果。字体大小不是问题 - 正如你所看到的那样,文本有很大的空间 - 它没有正确对齐。 – wayneh 2012-02-03 14:23:44

+0

好的,但看看sizeWithFont方法会给你的字符串的高度,如果你知道,你可以自己居中,然后用drawStringAtPoint绘制字符串。只需阅读链接 - 它为您提供了完成该任务所需的一切。 – sosborn 2012-02-04 02:56:48

+0

好吧,我会检查出来,看看我能做些什么。 – wayneh 2012-02-04 13:35:30