0

私は uitableviewcells を持つ uitableview を持っていますが、テキストの一部が長すぎてセルの端まで伸びており、選択するとアクセサリーティックビューが表示されます..

テキストが幅を超えて 2 行目に入る場合は、現在テキストを折り返しています。ただし、この UITableViewCell ラベルの幅を制限する良い方法があることを望んでいました。

4

4 に答える 4

1

cellForRowAtIndexPath: 関数内。初めてセルを作成するとき:

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
 if (cell == nil)
 {
   cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
   cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
   cell.textLabel.numberOfLines = 0;
   cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:17.0];
 }   

UITableViewCell の大きさを指定するので、heightForRowAtIndexPath 関数で指定します。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSString *str = [[arrTexts objectAtIndex:indexPath.row]; // filling text in label  
  CGSize maximumSize = CGSizeMake(300, 100); // change width and height to your requirement
 CGSize strSize = [str sizeWithFont:[UIFont fontWithName:@"Helvetica" size:17] constrainedToSize:maximumSize lineBreakMode:UILineBreakModeWordWrap] //dynamic height of string depending on given width to fit

 return (10+strSize.height+10) // caculate on your bases as u have string height
}
于 2012-08-23T05:38:10.840 に答える
1

の幅cellForRowAtIndexPathを設定しますtextLabel

cell.textLabel.frame = CGRectMake(cell.textLabel.frame.origin.x, cell.textLabel.frame.origin.y, 280, cell.textLabel.frame.size.height);

それで全部です。

于 2012-08-23T05:42:22.853 に答える
0

UITableViewCellオーバーライドするにはサブクラスが必要だと思います-layoutSubviews...呼び出しsuperてから、ラベルを適切にフレーム化します。制約はある程度役に立ちますが、iOSではまだ使用していません。(問題が組み込みのレイアウト機能であると仮定すると、テキストを収容するために必要な幅のラベルが作成されます)

于 2012-08-23T05:27:53.113 に答える
0

これを行うには2つの方法があります。

1)カスタムUITableViewCellクラスを作成し、任意の位置とサイズでUILabelを追加します。そして、それをcellForRowAtIndexPathメソッドで使用します。

2)それ以外の場合は、UITableViewCellのデフォルトのUILabelを使用しないでください。textLabelとdetailTextLabelを使用して、セルに独自のUILabelを任意の位置とサイズで追加します。

于 2012-08-23T05:28:15.647 に答える