2017-04-12 48 views
0

我已經看過幾個Stackoverflow問題,其中人們遇到了boundingRectWithSize問題,但沒有一個是我的問題。boundingRectWithSize有時會返回高度約爲1的線太高

下面的代碼通常會計算高度爲1行的文本太高。

CGFloat height = [label.attributedText 
    boundingRectWithSize:CGSizeMake(label.width, CGFLOAT_MAX) 
    options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) 
    context:nil].size.height; 

例如,串地圖類型:USGS地形是我的視圖的大約一半的寬度和應爲1行高(〜18個像素),但最終具有一個2行高度( 〜36個像素):

我也嘗試計算使用的NSString而不是NSAttributedString高度,但同樣的事情發生:

CGFloat height = [[label.attributedText string] 
    boundingRectWithSize:CGSizeMake(label.width, CGFLOAT_MAX) 
    options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) 
    attributes:@{NSFontAttributeName:TITLE_FONT} 
    context:nil].size.height; 

您可以在這張截圖的底部3個唱片公司結束了大小正確地看到,但不是前兩名。我在iPhone模擬器開啓顏色混合標籤,讓子視圖將着色來說明:

enter image description here

+0

不確定是原因,但請注意,最上面的兩個字符串包含繪製在基線以下的字符(頂部字符串爲'p'和'y',下一個字符爲'('和')')而其他三個則沒有。 – ravron

+0

@ravron是的,我已經注意到,實際上,但我試圖改變基線以下的字符,並有相同的結果。 –

+0

問題是否會以標準字體持續存在?我對字體有問題,這些字體看起來並不明顯,這些字體看起來並不明顯。 – ravron

回答

2

您的字符串中可能有一個尾隨換行符。嘗試用whitespaceAndNewlineCharacterSet修剪它。

0

我有過類似的事情發生在我身上一段時間以前,雖然這不是用屬性串。當它發生在我身上時,標籤的框架還沒有完全設置,所以在計算時寬度足夠窄,不得不纏繞到下一行。在進行此計算時檢查標籤的框架,並確保其實際上與您認爲的一樣寬。