2009-08-05 9 views
9

実際に複数の行にまたがるテキストを取得できないようです。高さが正しいように見えます。私は何が欠けていますか?可変サイズのUITableViewCellを作成するにはどうすればよいですか?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"StatusCell"] autorelease]; 

    CGRect frame = cell.contentView.bounds; 
    UILabel *myLabel = [[UILabel alloc] initWithFrame:frame]; 
    myLabel.text = [[person.updates objectAtIndex:indexPath.row] valueForKey:@"text"]; 
    [cell.contentView addSubview:myLabel]; 

    [myLabel release]; 

    return cell; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    NSString *text = [[person.updates objectAtIndex:indexPath.row] valueForKey:@"text"]; 
    UIFont *font = [UIFont systemFontOfSize:[UIFont systemFontSize]]; 
    CGSize withinSize = CGSizeMake(tableView.frame.size.width, 1000); 
    CGSize size = [text sizeWithFont:font constrainedToSize:withinSize lineBreakMode:UILineBreakModeWordWrap]; 

    return size.height + 20;  
} 

また、ラベルが表のセルより長く表示されるのはなぜですか? alt text http://i31.tinypic.com/15chnjd.gif

答えて

15

Tweeteroは、MessageListController.mにこの例を示します。

http://ec.mashable.com/wp-content/uploads/2009/04/imageshackscreen.jpg

(PICがMashableから取られる)がコードは、次の画面を描画します。

基本的な実装の概要:

  1. UITableViewCellを構築し、tableviewCellWithReuseIdentifier:に示した方法でサブビューとしてUILabelを作成して追加します。 TEXT_TAGラベルの作成を探します。

  2. UITableViewCellをビューで充実させるときは、configureCell:forIndexPathのようにラベルを正しくフォーマットして、同様にラベルタグTEXT_TAGを探します。

  3. tableView:heightForRowAtIndexPathのように、各セルの適切な高さを返します。

+0

これは素晴らしいことです。ありがとう。 –

2
myLabel.numberOfLines = 2; 

このプロパティを使用する方法についての完全な情報のためdocsを確認してください。

+0

問題は、それが常に特定の番号ではないことであり、それはnumberOfLinesプロパティはライン** **最大数を設定し、各行 – Jason

+0

ために変更されます。それを高い値に設定します。 (Robが言ったように、ドキュメントをチェックしてください) –

+2

また、myLabel.lineBrakeModeをUILineBreakModeWordWrapに設定する必要があります。 –

0
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return theSizeYouWantYourCellToBe; 
} 
関連する問題