UILabel不会改变setFrame上的高度

我试图改变一个UILabel的高度取决于标签中有多less文字。

我可以计算标签所需的大小,但是当我尝试设置UILabel框架时,它不会改变。

以下是我的代码。 即使我将最后一行中的size.heightreplace为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; } 

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

而不是做所有这些艰苦的工作,尝试像这样:

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

记住sizeToFit尊重你的标签默认宽度,所以根据你的要求设置宽度。 然后Height将由sizeToFit方法pipe理。

最后,你将需要在你的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; } 

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

地址:

 textLabel.numberOfLines = 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; 

numberOfLines

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

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

看看UILabel类参考

根据你的问题,你可以设置任何行

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

 textLabel.numberOfLines = lines; 

是的,多行使用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;; } 

尝试这个 :

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