ios - 如何在没有自定义单元格的情况下将文本包装在 UITableViewCell 中

这是在 iPhone 0S 2.0 上。 2.1 的答案也很好,但我不知道关于表格的任何差异。

感觉应该可以在不创建自定义单元格的情况下让文本换行,因为 UITableViewCell 默认包含 UILabel。我知道如果我创建一个自定义单元格,我可以让它工作,但这不是我想要实现的 - 我想了解为什么我目前的方法不起作用。

我发现标签是按需创建的(因为单元格支持文本和图像访问,所以它不会在必要时创建数据 View ),所以如果我这样做:

cell.text = @""; // create the label
UILabel* label = (UILabel*)[[cell.contentView subviews] objectAtIndex:0];

然后我得到一个有效的标签,但设置 numberOfLines (和 lineBreakMode)不起作用 - 我仍然得到单行文本。 UILabel 中有足够的高度供文本显示 - 我只是在 heightForRowAtIndexPath 中返回一个较大的高度值。

最佳答案

这是一个更简单的方法,它对我有用:

在您的 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];
}

您会注意到我将标签的行数设置为 0。这使它可以根据需要使用尽可能多的行。

下一部分是指定你的 UITableViewCell 有多大,所以在你的 heightForRowAtIndexPath 函数中这样做:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellText = @"Go get some text for your cell.";
    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:17.0];
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
    CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

    return labelSize.height + 20;
}

我在返回的单元格高度上加了 20,因为我喜欢文本周围的小缓冲区。

https://stackoverflow.com/questions/129502/

相关文章:

ios - 从 UIColor 创建 UIImage 以用作 UIButton 的背景图像

ios - 如何查看 NSString 是否以某个其他字符串开头?

ios - 两个 NSDate 之间的天数

ios - 如何在 iPhone 上创建圆角 UILabel?

objective-c - 何时使用 enumerateObjectsUsingBlock 与 fo

ios - Objective-C - 从字符串中删除最后一个字符

ios - 如何确定 NSDate 是否是今天?

iphone - 以编程方式切换到 TabBar 选项卡 View ?

ios - iPhone:检测自上次屏幕触摸以来的用户不活动/空闲时间

ios - 在 Objective-C 中获取时间