为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕神8447489 2019-09-18 13:47:54
这是在iPhone 0S 2.0上。2.1的答案也很好,但我不知道有关表的任何差异。感觉应该可以在不创建自定义单元格的情况下获取文本,因为默认情况下UITableViewCell包含a UILabel。我知道如果我创建一个自定义单元格,我可以使它工作,但这不是我想要实现的 - 我想了解为什么我当前的方法不起作用。我已经发现标签是按需创建的(因为单元格支持文本和图像访问,所以它不会在必要时创建数据视图),所以如果我做这样的事情:cell.text = @""; // create the labelUILabel* label = (UILabel*)[[cell.contentView subviews] objectAtIndex:0];然后我得到一个有效的标签,但设置numberOfLines(和lineBreakMode)不起作用 - 我仍然得到单行文本。UILabel文本中有足够的高度显示 - 我只是为高度返回一个较大的值heightForRowAtIndexPath。
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

这是一种更简单的方法,它适用于我:


在你的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,因为我喜欢在文本周围添加一点缓冲区。


查看完整回答
反对 回复 2019-09-18
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞


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:17.0];

}


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

{

    NSString *cellText = @"Go get some text for your cell.";

    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:17.0];


    NSAttributedString *attributedText =

        [[NSAttributedString alloc]

            initWithString:cellText

            attributes:@

            {

                NSFontAttributeName: cellFont

            }];

    CGRect rect = [attributedText boundingRectWithSize:CGSizeMake(tableView.bounds.size.width, CGFLOAT_MAX)

                                               options:NSStringDrawingUsesLineFragmentOrigin

                                               context:nil];

    return rect.size.height + 20;

}


查看完整回答
反对 回复 2019-09-18
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

当我遇到同样的问题时,记录我的经验的简短评论/答案。尽管使用了代码示例,但是表视图单元格高度正在调整,但是单元格内的标签仍未正确调整 - 解决方案是我从自定义NIB文件加载我的单元格,这在调整的单元格高度后发生。

我在NIB文件中设置了不包装文本的设置,标签只有1行; NIB文件设置覆盖了我在代码中调整的设置。

我接受的教训是确保始终牢记物体在每个时间点的状态 - 它们可能尚未创建!......有人下线了。


查看完整回答
反对 回复 2019-09-18
  • 3 回答
  • 0 关注
  • 559 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信