我想计算uitableview单元格中文本标签的高度。在看到sizewithfont被ios 7弃用之后,我实现了sizewithattributes但是返回值比标签对于它包含的文本的大小正确应该小。我也试过sizetofit方法也无济于事。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
NSDictionary *message = self.messages[indexPath.row];
UILabel *nameLabel = (UILabel *)[cell.contentView viewWithTag:1];
UILabel *messageContent = (UILabel *)[cell.contentView viewWithTag:3];
UIImageView *image = (UIImageView *)[cell.contentView viewWithTag:2];
messageContent.text = [message objectForKey:@"messageContent"];
NSString *content = [message objectForKey:@"messageContent"];
NSLog(@"Message: %@", content);
CGSize textSize = [content sizeWithAttributes:@{ NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Light" size:17.0]}];
messageContent.font = [UIFont fontWithName:@"HelveticaNue-Light" size:17.0];
CGRect messageFrame = messageContent.frame;
messageFrame.size = textSize;
messageContent.frame = messageFrame;
nameLabel.text = [message objectForKey:@"senderName"];
NSString *senderPicture = [message objectForKey:@"senderPicture"];
UIImage* myImage = [UIImage imageWithData:
[NSData dataWithContentsOfURL:
[NSURL URLWithString: senderPicture]]];
image.image = myImage;
image.layer.cornerRadius = 27.0;
image.layer.masksToBounds = YES;
//Configure the cell...
return cell;
}
答案 0 :(得分:9)
user/Elio.d有一个很好的答案here.
我附上了他的答案的成绩单。如果它对您有所帮助,请务必在Elio.d
上发送his original answer一个upvote你可以试试这个:
NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:14.0f]};
// NSString class method: boundingRectWithSize:options:attributes:context is
// available only on ios7.0 sdk.
CGRect rect = [textToMeasure boundingRectWithSize:CGSizeMake(width, MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributes
context:nil];