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;

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


屏幕快照 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不一致所导致的,改成一样的就好了。


屏幕快照 2018-09-29 上午10.16.47.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,050评论 3 119
  • 今年以来,大盘股的表现显著好于小盘股,上证指数年内仅下跌7.41%,创业板指则大跌20.19%。分市值区间看,剔除...
    syld168阅读 786评论 0 0
  • 还记得贾跃亭在年会上演唱《野子》,恰逢我对乐视整个全球化,各种超级战略正觉得可怕,觉得敬佩之时,细细听了《野子》的...
    神奇的天鹿阅读 2,629评论 0 1
  • 致12岁的自己: 偶然间看到10年前的我,莫名的想和你说一说话,聊聊这十年里遇见的人,干过的事儿,顺便也给对...
    闻墨观香阅读 2,615评论 0 0
  • 查询MYSQL数据库所有表名以及表注释 查询MYSQL数据库所有字段名以及字段注释
    十九贝勒阅读 4,371评论 0 51