如何计算UILabel上的NSString的宽度和高度

我正在一个项目上dynamic地UILabel宽度和高度上的NSString。 我试着用:

NSString *text = [messageInfo objectForKey:@"compiled"]; writerNameLabel.numberOfLines = 0; writerNameLabel.textAlignment = UITextAlignmentRight; writerNameLabel.backgroundColor = [UIColor clearColor]; CGSize constraint = CGSizeMake(296,9999); CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; NSLog(@"sizewidth = %f, sizeheight = %f", size.width, size.height); NSLog(@"writerNameLabel.frame.size.width 1 -> %f",writerNameLabel.frame.size.width); [writerNameLabel setFrame:CGRectMake(writerNameLabel.frame.origin.x, writerNameLabel.frame.origin.y, size.width, size.height)]; CGRect labelFram = writerNameLabel.frame; labelFram.origin.x = cell.frame.size.width - writerNameLabel.frame.size.width - 80; writerNameLabel.frame = labelFram; NSLog(@"writerNameLabel.frame.size.width 2-> %f",writerNameLabel.frame.size.width); 

在这里输入图像说明

请看看绿色的泡泡,而不是灰色的泡泡。 还是不对。

泡沫的代码

 bubbleImageView.frame = CGRectMake(writerNameLabel.frame.origin.x, writerNameLabel.frame.origin.y, writerNameLabel.frame.size.width+15, writerNameLabel.frame.size.height+5); 

请指教! 谢谢!

那是因为你没有重用表格单元,结构应该是这样的:

 NSString *text = [messageInfo objectForKey:@"compiled"]; if(cell == nil) { writerNameLabel.numberOfLines = 0; writerNameLabel.textAlignment = UITextAlignmentRight; writerNameLabel.backgroundColor = [UIColor clearColor]; [cell addSubview:writerNameLabel]; } else { writerNameLabel = (UILabel *)[cell viewWithTag:WRITER_NAME_LABEL_TAG]; } CGSize constraint = CGSizeMake(296,9999); CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; [writerNameLabel setFrame:CGRectMake(writerNameLabel.frame.origin.x, writerNameLabel.frame.origin.y, size.width, size.height)]; 

我已经通过并回答了你的一些问题,这是编写你的tableview控制器的正确方法。 你的问题将得到解决。