2011-07-28 47 views
0

我使用的Loren Brichter's Fast Scrolling script定製版本,我有一個問題,即在細胞中的標籤不會停止,如果他們到達細胞的一端。當編程表視圖的標準方式,如果textLabelsdetailTextLabels太長,它們會自動切斷,並在字符串的結尾應用三個點留在細胞內。收縮定製爲textLabel和detailTextLabel在自定義的UITableViewCell

我想做同樣的事情,但我不知道如何去實現它。以下是添加文本時表視圖單元格我使用的代碼:(使用約字符寬度)

CGPoint t; 
CGPoint d; 

t.x = feedImage.size.width + 10 + 12; 
t.y = 20; 
[textLabel drawAtPoint:t withFont:textLabelFont]; 

d.x = feedImage.size.width + 10 + 12; 
d.y = 39; 
[detailTextLabel drawAtPoint:d withFont:detailTextLabelFont]; 

回答

0

可以通過編程方式找出這將是最後兩/三個字符可見。然後刪除剩餘的字符,並自己把這三個點!爲大寫字符嘗試16的寬度和用於較低情況下,12分的15字體大小的寬度通過試驗和錯誤找出正確的數字。

好的。這是根據字符調整標籤高度(對於給定寬度)的函數。變量「width」是標籤的寬度,「tempWidth」是被計算的當前行的寬度。您可以修改此功能在最後返回截斷的字符串與三個點...

#define smallLetterWidth 12 
#define capitalLetterWidth 16 
-(int) numRowsForString:(NSString *) inputStr width:(int) width{ 
int j=0; 
numRows=1; 
int tempWidth = 0; 
while(j<[inputStr length]){ 
    if([[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[inputStr characterAtIndex:j]]) 
     tempWidth += capitalLetterWidth; 
    else 
     tempWidth += smallLetterWidth; 
    if(tempWidth>width){ 
     tempWidth = 0; 
     numRows++; 
     j--; 
    } 
    else if(tempWidth==width) 
    { 
     tempWidth = 0; 
     numRows++; 
    } 
    j++; 
} 
return numRows; 
} 

更妙的是:What is -[NSString sizeWithFont:forWidth:lineBreakMode:] good for?

+0

這並不完全看起來像是一個可靠的方法來做到這一點。是不是有一個函數可以通過只給它一個像素寬度來切斷一個字符串?那將是真棒。 – wstr

+0

恐怕沒有這個功能。我知道這是不是一個確切的方式,但它是唯一的方法... – tipycalFlow

+0

你能提供關於如何做到這一點一些例子,然後呢? – wstr