UITableViewCell使textLabel适合整个框架

时间:2015-02-09 09:52:04

标签: uitableview autolayout

我试图让我的UITableViewCell.textLabel属性在纵向和横向上自动调整文本。

现在我的tableView不可滚动,因此cell框架不是动态的。我需要textLabel属性来自动换行并调整为一组#行。将numberOfLines设置为0并不起作用,因为它已切断,因为我的cell高度小于textLabel最终高度。使用numberOfLines的任意数字会切断文本。

如何调整textLabel的大小以适应frame的{​​{1}}?

以下代码

cell

1 个答案:

答案 0 :(得分:1)

编辑:如果单元格是设定的高度,这很简单。您必须在其中设置自定义单元格和textLabel,因为我认为您无法以您需要的方式修改基本或其他预设单元格中的textLabel。只需添加一个文本标签并设置约束,将其链接到四边,最小量(可以为零)。如果有额外的空间,标签会自动垂直居中文本,因此标签太高不应该成为问题。

原始答案:


如果你没有使用tableView自调整单元格,也许是为了支持iOS 7,那么它在单元格中的作用并不重要,因为问题在于tableView行高。如果是单个标签,那么经典的boundingRect方法将起作用。在tableView:heightForRowAtIndexpath:

    NSString *stringFromDataSource = @"Text For Label";
    CGSize potentialSize = CGSizeMake(CGRectGetWidth(self.tableview.frame), CGFLOAT_MAX);
    NSStringDrawingOptions optionsForMultiline = NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading;
    NSDictionary *attributes = @{
                             NSFontAttributeName : [UIFont preferredFontForTextStyle:UIFontTextStyleBody]
                             }; //or whatever
    CGRect rectForText = [stringFromDataSource boundingRectWithSize:potentialSize
                                     options:optionsForMultiline
                                  attributes:attributes
                                     context:nil];
    return CGRectGetHeight(rectForText);

请注意,在您的问题中,如果textLabel使用autolayout进行扩展,则不会使用用于调整单元格大小的各种选项,除非限制最大大小,此时{{1}等等会开始。