2011-07-28 6 views
0

私はLoren Brichter's Fast Scrolling scriptというややカスタマイズされたバージョンを使用しています。セルの終わりに達してもセル内のラベルが停止しないという問題があります。 textLabelsまたはdetailTextLabelsが長すぎる場合、標準的な方法でテーブルビューをプログラミングすると、文字列の最後に3つのドットが自動的に切り取られ、セル内に留まります。カスタムのUITableViewCellでカスタムtextLabelとdetailTextLabelを縮小する

私はまったく同じことをしたいと思いますが、それを達成する方法はわかりません。ここでは、テーブルビューのセルにテキストを追加するときに私が使用するコードです:(約使用して文字幅)

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

あなたがプログラムで見つけることができ、最後の2/3の文字が見えるだろう。その後、残りの文字を削除し、3つのドットを自分で入れてください!大文字の場合は幅16、小文字の場合はフォントサイズ15の場合は幅12ポイントを試してください。試行錯誤で正しい数を見つけてください。

以下は、文字に応じてラベルの高さを(指定された幅に対して)調整する関数です。変数 "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; 
} 

...最後に3個のドットで切り捨てられた文字列を返すために、さらに良いこの機能を変更することができます。 What is -[NSString sizeWithFont:forWidth:lineBreakMode:] good for?

+0

これは信頼性の高い方法ではありません。文字列をピクセル幅だけでカットする機能はありませんか?それは素晴らしいだろう。 – wstr

+0

私はこのための機能はないと思う。私はそれが正確な方法ではないことを知っていますが、それは唯一の方法です... – tipycalFlow

+0

これを行う方法のいくつかの例を教えてください。 – wstr

関連する問題