0

我的 iOS 应用程序出现问题,并在 UITableViewCell 中获取 UILabel 进行包装。文本显示,但它只会显示在一行上。

这是我的代码:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    UILabel *noteLabel = (UILabel *)[cell.contentView viewWithTag:2];

    NSDictionary *contact = [jsonResults objectAtIndex:indexPath.row];
    noteLabel.lineBreakMode = UILineBreakModeWordWrap;
    noteLabel.numberOfLines = 0;
    noteLabel.text = [contact objectForKey:@"note"];   
    return cell;
}

我相信这个问题与这条线有关:

UILabel *noteLabel = (UILabel *)[cell.contentView viewWithTag:2];

我不确定如何从标签中获取标签,我认为这条线不会让我更改标签属性。

4

3 回答 3

0

您可能需要设置标签的高度:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    UILabel *noteLabel = (UILabel *)[cell.contentView viewWithTag:2];

    NSDictionary *contact = [jsonResults objectAtIndex:indexPath.row];
    noteLabel.lineBreakMode = UILineBreakModeWordWrap;
    noteLabel.numberOfLines = 0;
    noteLabel.text = [contact objectForKey:@"note"];

    //Note: adjust the proper width to be constrained to
    CGSize size = [noteLabel.text sizeWithFont:noteLabel.font forWidth:150 lineBreakMode:noteLabel.lineBreakMode];
    CGRect labelFrame = noteLabel.frame;
    labelFrame.size = size;
    noteLabel.frame = labelFrame; 

    return cell;
}
于 2012-06-18T16:38:11.143 回答
0

自 2012 年以来,时间已经过去了。在当前的 Xcode 5 世界中,如果 numberOfLines 在代码或 Interface Builder 中设置为 0,则会自动扩展多行的高度。可以防止在这种情况下显示多行的一件事是,如果在 Interface Builder 或代码中设置了 AutoLayout 高度约束。在这种情况下,它看起来像一个被截断的标签,但与截断标签相比,它不会以省略号 (...) 结尾。

为了使 AutoLayout 能够按预期运行,您通常不希望为 UILabel 设置更高的高度,除非您知道 UILabel 总是会有多行。

于 2014-07-27T20:42:54.683 回答
0

对我来说不同的是设置标签的preferredMaxLayoutWidth。

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UILabel_Class/#//apple_ref/occ/instp/UILabel/preferredMaxLayoutWidth

于 2015-06-25T01:15:06.457 回答