【问题标题】:Many lines in tablecell [duplicate]表格单元格中的许多行[重复]
【发布时间】:2013-02-27 21:30:58
【问题描述】:

我正在尝试从数据库中获取 cmets 列表。 cmets 甚至可能达到 100 行。问题是我不能让它断线。我用过

comment.adjustFontSizeToFitWidth = NO;
comment.numberOfLines = 0;
comment.lineBreakMode = UILineBreakModeCharacterWrap

目前测试评论是:

呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜

但它在中间结束,没有“...”,也没有文字换行。如何解决这个问题?

顺便说一句。有很多这样的细胞。

【问题讨论】:

  • 你还必须增加文本标签的高度
  • 不能。那些没有太多文本的字段将有空白空间。它应该是动态高度。
  • 非常相似的问题。 stackoverflow.com/q/129502/767730
  • 没有人说你必须将高度增加到固定值。对每一行都这样做=P
  • 好吧,如果你希望文本高度是动态的,那么你将不得不添加一些代码来使其动态化。

标签: iphone ios objective-c


【解决方案1】:
#define FONT_SIZE 11.0f
#define CELL_CONTENT_WIDTH 157.0f
#define CELL_CONTENT_MARGIN 10.0f

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
        NSString *text = YorCommentString;// or any String that u want.
        CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);
        CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
        CGFloat height = MAX(size.height, 44.0f); // set as u want 
        return height + (CELL_CONTENT_MARGIN * 2); // set as u want

}

在上面的代码中不需要为UILabel设置numberOfLines

【讨论】:

  • 评论未显示...
  • 这是在表格视图单元格中。标签本身可以调整大小以适应表格单元格视图。但是该表将始终仅提供其 rowHeight 属性中给出的空间,或者 -if- 由 tableView:heightForRowAtIndexPath: 返回。因此,他不会准确计算所需的大小并从中得出单元格的大小,并通过实现 tableView:heightForRowAtIndexPath: 来提供 exatyl
  • @HermannKlecker- 检查我的编辑。
  • @MV- 检查我的编辑...
【解决方案2】:

在您的 tableview 委托中执行此操作:

- (CGFloat)tableView:(UITableView *)tableView1 heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
        CGSize maximumSize = CGSizeMake(480.0,1000.0); // Put appropriate required height and width.
        NSString *dateString = [NSString stringWithFormat:@"%@",yourString];
        UIFont *dateFont = [UIFont fontWithName:@"Helvetica" size:14];
        CGSize dateStringSize = [dateString sizeWithFont:dateFont 
                                       constrainedToSize:maximumSize 
                                           lineBreakMode:UILineBreakModeWordWrap];
        return dateStringSize.height;
}

此代码将为您的单元格设置适当的高度。然后在你的 cellForRowAtIndexPath 函数中。保留此代码:

comment.adjustFontSizeToFitWidth = NO;
comment.numberOfLines = 0;
comment.lineBreakMode = UILineBreakModeCharacterWrap

【讨论】:

    【解决方案3】:

    你将不得不阻止tableView:heightForRowAtIndexPath: 有关详细信息,请参阅http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html

    在该方法中,您必须根据标签显示文本所需的高度来计算每个单元格所需的高度。 在 NSString 的 UIExtenstions 中,您将找到用于该计算的辅助方法。 http://developer.apple.com/library/ios/#documentation/uikit/reference/NSString_UIKit_Additions/Reference/Reference.html

    这里有很多关于如何使用的例子——sizeWithFont:constrainedToSize:lineBreakMode:

    然后您可以在 cellForRowAtIndexPath 中布置单元格项目,您需要再次使用sizeWithFont:... 来计算文本大小。或者,如果你想要一个简洁的解决方案,更好的子类UITableViewCell 并覆盖它的layoutSubviews 方法并在那里进行布局。

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多