0

Loren Brichter の Fast Scrolling スクリプトを少しカスタマイズしたバージョンを使用していますが、セルの最後に到達してもセル内のラベルが停止しないという問題があります。テーブル ビューを標準的な方法でプログラミングする場合、textLabelsまたはdetailTextLabelsが長すぎる場合、それらは自動的に切り取られ、文字列の最後に 3 つのドットを適用してセル内にとどまります。

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

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];
4

2 に答える 2

1

このチュートリアルに従いました。シームレスに動作します。

于 2011-07-29T21:00:57.677 に答える
0

プログラムで(おおよその文字幅を使用して)表示される最後の2/3文字を見つけることができます。次に、残りの文字を削除して、3つのドットを自分で配置します。大文字の場合は幅16、小文字の場合はフォントサイズ15の場合は幅12ポイントを試してください。試行錯誤しながら正しい数字を見つけてください。

Ok。これは、文字に応じてラベルの高さ(特定の幅に対して)を調整する関数です。変数「width」はラベルの幅であり、「tempWidth」は計算されている現在の行の幅です。この関数を変更して、末尾に3つのドットが付いた切り捨てられた文字列を返すことができます...

#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;
}

さらに良い:-[NSString sizeWithFont:forWidth:lineBreakMode:]は何に適していますか?

于 2011-07-28T06:47:38.177 に答える