0

これが可能かどうか知りたいです:

  • 投稿からの複数のコメントを含む表を表示する場合、各コメントの長さが異なる場合があります。そのため、表のセルは垂直方向にサイズを変更して、より多くのテキストに対応する必要があります。

コントローラーにコードを追加せずにこの結果を達成したいので、ここやSOの他の場所に投稿されたものとは異なるソリューションを探していることに注意してください。

IB を使用して、私のセルは次を使用します。

  • スタイル: サブタイトル
  • モード: 合わせて拡大縮小
  • 行の高さ: デフォルト

私の「タイトル」ラベル(展開する必要があるラベル):

  • 改行: ワードラップ
  • 行: 0

上記では、実際には複数行のテキストが表示されますが、行のサイズがそれに応じて変更されないため、複数の行のテキストが重なってしまいます。

これをコントローラーにコーディングせずに行のサイズを垂直方向に変更することは可能ですか?

CommentViewController.m

#import "CommentViewController.h"

@implementation CommentViewController
@synthesize     commentsArray;

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return commentsArray.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"commentCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    NSDictionary *comment       = [commentsArray objectAtIndex:indexPath.row];
    NSString     *commentText   = [comment objectForKey:@"comment_text"];
    NSString     *commentAuthor = [comment objectForKey:@"comment_author_name"];

    cell.textLabel.text       = commentText;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", commentAuthor];

    return cell;
}

@end
4

1 に答える 1

0

私がコードで言及したSOの回答からコードをマージした方法は次のとおりです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"commentCell";

    NSDictionary *comment       = [commentsArray objectAtIndex:indexPath.row];
    NSString     *commentText   = [comment objectForKey:@"comment_text"];
    NSString     *commentAuthor = [comment objectForKey:@"comment_author_name"];

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

    cell.textLabel.text       = commentText;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", commentAuthor];

    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSDictionary *comment       = [commentsArray objectAtIndex:indexPath.row];
    NSString     *commentText   = [comment objectForKey:@"comment_text"];

    UIFont *cellFont      = [UIFont fontWithName:@"Helvetica" size:14.0];
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
    CGSize labelSize      = [commentText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];

    return labelSize.height + 40;
}

@end
于 2012-11-29T04:40:21.930 に答える