5

我正在尝试UILabel根据标签中的文本数量来更改 a 的高度。

我可以计算标签所需的尺寸,但是当我尝试设置UILabel框架时,它并没有改变。

下面是我的代码。即使我将最后一行中的 size.height 替换为 500 之类的东西,UILabel框架的大小也不会改变

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

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"GameItemCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];

    GameItem* item = [_hunt.gameItems objectAtIndex: indexPath.row];


    cell.itemHeaderLabel.text = [NSString stringWithFormat:@"#%d - (%d pts)", indexPath.row+1, item.itemPoints];

    UILabel* textLabel = cell.itemTextLabel;

    textLabel.text = item.itemText;
    textLabel.lineBreakMode = NSLineBreakByWordWrapping;


    CGRect frame = cell.itemTextLabel.frame;
    CGSize textSize = { frame.size.width, 20000.0f };
    CGSize sizeOneLine = [@"one line" sizeWithFont:cell.itemTextLabel.font constrainedToSize:textSize lineBreakMode:NSLineBreakByWordWrapping];
    CGSize cellTextSize = [item.itemText sizeWithFont:cell.itemTextLabel.font constrainedToSize:textSize lineBreakMode:NSLineBreakByWordWrapping];
    CGSize sizeOneLineSpacing = CGSizeMake(sizeOneLine.width, sizeOneLine.height + 3);
    NSInteger lines = cellTextSize.height / sizeOneLine.height;
    CGSize size = CGSizeMake(frame.size.width, lines * sizeOneLineSpacing.height);

    textLabel.frame = CGRectMake(frame.origin.x, frame.origin.y, size.width, size.height);



    return cell;
}
4

8 回答 8

7

您必须在 GameItemCell 里面设置标签的框架-(void)layoutSubviews

于 2013-02-28T09:31:15.100 回答
2

与其做所有艰苦的工作,不如试试:

textLabel.numberOfLines = 0;
textLabel.text = textString;
[textLabel sizeToFit];

请记住sizeToFit尊重您的标签默认宽度,因此请根据您的要求设置宽度。然后高度将由该sizeToFit方法管理。

于 2013-02-28T08:37:34.003 回答
2

最后,您需要在 UITableViewCell 子类中添加类似这两个方法的内容:

// call this method on your cell, during cellForRowAtIndexPath
// provide your resizing info (frame, height, whatever)

- (void) updateLabelFrame:(CGRect)newLabelFrame {
    self.resizedLabelFrame = newLabelFrame;
    [self setNeedsLayout];
}

// the actual resize happens here when UIKit gets around to it

- (void) layoutSubviews {
    [super layoutSubviews];
    self.myLabel.frame = self.resizedLabelFrame;
}
于 2014-02-26T03:01:39.113 回答
1

您错过了numberOfLines要设置的属性。

添加 :

textLabel.numberOfLines = 0;
于 2013-02-28T08:09:38.313 回答
0

是的,对于多行使用 textLabel.numberOfLines = 0; 在 cellForRowAtIndexPath 中

但是您仍然需要更改单元格的高度:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Calculate new cell height too as you are doing in cellForRowAtIndexPath 
    return YOUR_SIZE;;
}
于 2013-02-28T09:58:47.437 回答
0

行数

用于呈现文本的最大行数。

此属性的默认值为 1。要删除任何最大限​​制并根据需要使用尽可能多的行,请将此属性的值设置为 0。

看看UILabel 类参考

根据您的问题,您可以设置行数

现在没有为您的标签设置行数,所以设置它,

textLabel.numberOfLines = lines;
于 2013-02-28T08:12:49.140 回答
0
CGRect labelFrame = myLabel.frame;

labelFrame.size = [myLabel.text sizeWithFont:myLabel.font             constrainedToSize:CGSizeMake(myLabel.frame.size.width, CGFLOAT_MAX)
                                lineBreakMode:myLabel.lineBreakMode];

cell.textLabel.frame = labelFrame;
于 2013-02-28T08:24:16.147 回答
0

尝试这个 :

        NSString *text1 = shareObjC.commentText;
        CGSize constraint1 = CGSizeMake(280 - (size.width + 5), 2000);

        CGSize size1 = [text1 sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:constraint1 lineBreakMode:UILineBreakModeWordWrap];

        UILabel *lblComment = [[[UILabel alloc] initWithFrame:CGRectMake(posx,posy,size1.width,size1.height)] autorelease];

        lblComment.lineBreakMode = UILineBreakModeWordWrap;
        lblComment.numberOfLines = size1.height/15;
        [lblComment setFont:[UIFont systemFontOfSize:12]];
        lblComment.text = text1;
        [cell.viewLikeComment addSubview:lblComment];
于 2013-03-04T07:58:53.607 回答