2011-02-05 22 views
5

我試圖縮進UILabel中的文本以在顯示背景顏色的文本週圍留下一些邊距。以下的建議here我重寫textRectForBounds:limitedToNumberOfLines:像這樣:UILabel textRectForBounds在嘗試創建保證金時沒有效果

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines 
{ 
    CGRect intermediate = CGRectMake(bounds.origin.x+MARGIN,bounds.origin.y+MARGIN,bounds.size.width-2*MARGIN,bounds.size.height-2*MARGIN); 
    return [super textRectForBounds:intermediate limitedToNumberOfLines:numberOfLines]; 
} 

但無論我做什麼,文本緊結束了對矩形的左邊框。看起來好像圖畫忽略了CGRect的原點部分(雖然它看起來像是寬度部分,好像我減小到中間寬度,例如bounds.size.width-200,但是textRectForBounds返回的矩形適當地縮小並且文本被繪製在一個很長的瘦列中)。

所以:我還需要做什麼UILabel使圖紙尊重textForRectBounds -returned-rect的origin.x和origin.y?如果我可以幫忙,我寧願不要覆蓋UILabeldrawTextInRect

更新:這是很久以前,我不記得爲什麼其他問題不適合我。我相信這是因爲我試圖使用多行的UILabel,而解決方案here在這種情況下不起作用。

+0

您是否試過直接返回`intermediate`? – 2011-02-05 13:20:50

+0

是的,但它沒有區別。 – damian 2011-02-05 15:45:15

回答

8

我想你應該會覆蓋textRectForBounds:limitedToNumberOfLines:drawTextInRect:這樣的:

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines 
{ 
    return CGRectInset(bounds, MARGIN, MARGIN); 
} 

- (void)drawTextInRect:(CGRect)rect 
{ 
    [super drawTextInRect: CGRectInset(self.bounds, MARGIN, MARGIN)]; 
} 
+0

謝謝,這工作(或多或少):我不得不做一些調整矩形寬度,以使事情正常工作與多條線,但我最終得到它的工作。 – damian 2011-02-06 08:30:43

0

檢查的文件,它可能有一定的幫助。對super的調用可能不會返回您所假設的值。

您不應該直接調用此方法 。在執行任何其他 計算之前,此方法只應由 覆蓋,該子類需要 更改接收方的邊界 矩形。使用 numberOfLines參數中的值將返回矩形的 高度限制爲指定行數的文本的 。 要調用此方法, 必須事先調用sizeToFit 或sizeThatFits:方法。需要注意的是 標籤中的UITableViewCell對象 基於單元的尺寸, 而不是請求的大小 這種 方法的默認實現規模返回邊界 矩形。

祝你好運!

相關問題