1、问题起源:
做了几个详情页,都是需要用到滚动视图来滚动,但是滚动视图的计算滚动范围高度,所以获得计算滚动视图内所有控件的高度,最让我困惑的是计算UIlabel的高度。
2、解决问题描述:
1)有问题的解决方案:
使用一个UIlabel的分类,把字体和行间距传到分类的方法,计算的高度不够精准。最大问题是第四行的时候内容显示不完整,会以省略号结尾;还有当显示很多行时上下边距会变得越来越大。
2)完美的解决方案(直接看代码)
由于UIlabel没有改变边距的属性,所以只能自定义UIlabel
#import@interface CustomLabel : UILabel
@property (nonatomic, assign) UIEdgeInsets textInsets; // 控制字体与控件边界的间隙
@end
#import "CustomLabel.h"
@implementation CustomLabel
- (instancetype)init {
if (self = [super init]) {
_textInsets = UIEdgeInsetsZero;
}
return self;
}
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
_textInsets = UIEdgeInsetsZero;
}
return self;
}
- (void)drawTextInRect:(CGRect)rect {
[super drawTextInRect:UIEdgeInsetsInsetRect(rect, _textInsets)];
}
使用代码
//定义对象
@property(nonatomic,strong) CustomLabel *summaryLabel;
//初始化UIlabel
self.summaryLabel = [[CustomLabel alloc] initWithFrame:CGRectZero];
self.summaryLabel.text = @"还是覅顺丰快递是否健康的时间反馈都是房价肯定是连接克鲁塞德九分裤哈哈回复哈回复哈哈撒哈哈哈哈哈快放假熬枯受淡艰苦奋斗时间反馈来的时间";
//设置上下边距
self.summaryLabel.textInsets = UIEdgeInsetsMake(-20*SCALE_FIT, 0, -20*SCALE_FIT, 0);
self.summaryLabel.numberOfLines = 0;
self.summaryLabel.textColor = GLOBAL_GRAY_COLOR;
self.summaryLabel.font = FONT(asp_fitScreen(26));
[_bottomView addSubview:self.summaryLabel];
//计算UIlabel的高度
weakSelf.summaryLabel.font = FONT(asp_fitScreen(26));
CGFloat labelWidth = SCREEN_WIDTH - 80*SCALE_FIT;
NSLog(@"-----------width %f",80*SCALE_FIT);
NSDictionary *attrs = @{NSFontAttributeName:weakSelf.summaryLabel.font};
CGSize maxSize = CGSizeMake(labelWidth, MAXFLOAT);
CGSize size = [weakSelf.summaryLabel.text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size;
weakSelf.summaryLabel.pz_viewSize = size;