2012-02-03 54 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