如何仅使用IB(无代码)将文本包装在UITableViewCell中?

时间:2012-11-29 04:06:14

标签: iphone objective-c ios uitableview

我想知道这是否可行:

  • 查看包含帖子中多条评论的表格时,每条评论的长度可能不同 - 因此表格单元格应垂直调整大小以容纳更多文字。

注意我正在寻找与发布的here和其他地方不同的解决方案,因为我希望在不必向控制器添加代码的情况下实现此结果。

使用IB,我的 单元格 使用:

  • style:subtitle
  • 模式:缩放以适合
  • 行高:默认

我的 “标题”标签 (应该展开的标签):

  • 换行符:自动换行
  • 行: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

1 个答案:

答案 0 :(得分: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