boundingRectWithSize 计算不准确

在UITableView中,可能每一行的cell显示的内容都不一样,在宽度固定的情况,就需要根据要显示的文字来计算实际需要的高度。
或者在根据UILabel内容的多少来计算Label的宽度时。都需要根据要显示的文字来计算实际需要的高度或者宽度

这就需要调用系统函数:

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode NS_DEPRECATED_IOS(2_0, 7_0, "Use -boundingRectWithSize:options:attributes:context:") __TVOS_PROHIBITED;

但有时候会出现下图所示的情况


boundingRectWithSize 计算不准确_第1张图片
屏幕快照 2018-09-29 上午10.07.58.png

在使用这个函数去计算的时候返回的宽度会出现不准确的现象
ViewController的代码:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
    NSString *titleStr = self.dataArray[indexPath.row];
    return CGSizeMake([self mh_stringSizeWithFont:[UIFont systemFontOfSize:13.0] str:titleStr maxWidth:ScreenWidth maxHeight:30].width +30, 30);
 }

- (CGSize)mh_stringSizeWithFont:(UIFont *)font str:(NSString*)str maxWidth:(CGFloat)maxWidth maxHeight:(CGFloat)maxHeight
{
    NSMutableDictionary *attr = [NSMutableDictionary dictionary];
    CGSize maxSize = CGSizeMake(maxWidth, maxHeight);
    attr[NSFontAttributeName] = font;
    return [str boundingRectWithSize:maxSize options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attr context:nil].size;
    
}

cell里面的代码

- (void)viewConfig
{
    WS(weakSelf);
    self.label = [[UILabel alloc] init];
    self.label.layer.cornerRadius = 5;
    self.label.layer.masksToBounds = YES;
    self.label.textAlignment = NSTextAlignmentCenter;
    self.label.backgroundColor = [UIColor lightGrayColor];
    [self addSubview:self.label];
    [_label mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(weakSelf);
    }];
}

后来发现是因为UILabel的默认字体大小是17,与vc里面的设置的13不一致所导致的,改成一样的就好了。


boundingRectWithSize 计算不准确_第2张图片
屏幕快照 2018-09-29 上午10.16.47.png

你可能感兴趣的:(boundingRectWithSize 计算不准确)