objective-c - 如何计算 UILabel 上 NSString 的宽高

标签 objective-c ios uitableview uilabel

我正在做一个项目,动态地在 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);

enter image description here

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

气泡代码

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 Controller 的正确方法。你的问题将得到解决。

关于objective-c - 如何计算 UILabel 上 NSString 的宽高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12002314/

相关文章:

ios - CCSprite 和 CCButton 在 iPad 模拟器中的错误位置

ios - swift - fatal error : unexpectedly found nil while unwrapping an Optional value (lldb)

iOS 应用程序在点击按钮将新行添加到 UITableView 时崩溃

iphone - 带有图像的自定义 UIButton

ios - 将 subview 保留为 UIStackView 中的原始尺寸

objective-c - Objective C 加密 CFB 模式

ios - 在 AlerView 的操作按钮上将文本设置为 TextView 点击 [iOS, Swift]

uitableview - 快速更改tableviewcell的宽度

ios - 接收器类型 'FBSDKError'(又名 'enum FBSDKError')不是 Objective-C 类

objective-c - 为 UITableView 中的部分添加背景图片