@interface UILabel (Common)
- (void) setLongString:(NSString *)str withFitWidth:(CGFloat)width;
- (void) setLongString:(NSString *)str withFitWidth:(CGFloat)width maxHeight:(CGFloat)maxHeight;
- (void) setLongString:(NSString *)str withFitWidth:(CGFloat)width maxHeight:(CGFloat)maxHeight andHeight:(CGFloat )height;
- (void) setLongString:(NSString *)str withVariableWidth:(CGFloat)maxWidth;
+ (instancetype)labelWithFont:(UIFont *)font textColor:(UIColor *)textColor;
@end
#import "UILabel+Common.h"
@implementation UILabel (Common)
- (void)setLongString:(NSString *)str withFitWidth:(CGFloat)width{
[self setLongString:str withFitWidth:width maxHeight:CGFLOAT_MAX];
}
- (void) setLongString:(NSString *)str withFitWidth:(CGFloat)width maxHeight:(CGFloat)maxHeight{
self.numberOfLines = 0;
CGSize resultSize = [str getSizeWithFont:self.font constrainedToSize:CGSizeMake(width, CGFLOAT_MAX)];
CGFloat resultHeight = resultSize.height;
if (maxHeight > 0 && resultHeight > maxHeight) {
resultHeight = maxHeight;
}
CGRect frame = self.frame;
frame.size.height = resultHeight;
[self setFrame:frame];
self.text = str;
}
- (void) setLongString:(NSString *)str withFitWidth:(CGFloat)width maxHeight:(CGFloat)maxHeight andHeight:(CGFloat)height{
self.numberOfLines = 0;
CGSize resultSize = [str getSizeWithFont:self.font constrainedToSize:CGSizeMake(width, CGFLOAT_MAX)];
CGFloat resultHeight = resultSize.height;
if (maxHeight > 0 && resultHeight > height) {
resultHeight = height;
}else{
resultHeight = height;
}
CGRect frame = self.frame;
frame.size.height = resultHeight;
[self setFrame:frame];
self.text = str;
}
- (void) setLongString:(NSString *)str withVariableWidth:(CGFloat)maxWidth{
self.numberOfLines = 0;
self.text = str;
CGSize resultSize = [str getSizeWithFont:self.font constrainedToSize:CGSizeMake(maxWidth, CGFLOAT_MAX)];
CGRect frame = self.frame;
frame.size.height = resultSize.height;
frame.size.width = resultSize.width;
[self setFrame:frame];
}
+ (instancetype)labelWithFont:(UIFont *)font textColor:(UIColor *)textColor{
UILabel *label = [self new];
label.font = font;
label.textColor = textColor;
return label;
}
@interface NSString (Common)
//文字高度计算
- (CGSize)getSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size;
- (CGFloat)getHeightWithFont:(UIFont *)font constrainedToSize:(CGSize)size;
- (CGFloat)getWidthWithFont:(UIFont *)font constrainedToSize:(CGSize)size;
//计算高度
- (CGFloat)getHeightWithFont:(UIFont *)font constrainedToSize:(CGSize)size{
return [self getSizeWithFont:font constrainedToSize:size].height;
}
- (CGFloat)getWidthWithFont:(UIFont *)font constrainedToSize:(CGSize)size{
return [self getSizeWithFont:font constrainedToSize:size].width;
}
- (CGSize)getSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size{
CGSize resultSize = CGSizeZero;
if (self.length <= 0) {
return resultSize;
}
resultSize = [self boundingRectWithSize:size
options:(NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin)
attributes:@{NSFontAttributeName: font}
context:nil].size;
resultSize = CGSizeMake(MIN(size.width, ceilf(resultSize.width)), MIN(size.height, ceilf(resultSize.height)));
return resultSize;
}