在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;
但有时候会出现下图所示的情况

在使用这个函数去计算的时候返回的宽度会出现不准确的现象
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不一致所导致的,改成一样的就好了。

网友评论