OC 版本
- (NSMutableAttributedString *)getAttributedStringForText:(NSString *)text font:(UIFont *)font
{
NSMutableAttributedString *mutableAttributedString = [[NSMutableAttributedString alloc] initWithString:text];
NSMutableDictionary *mutableAttributes = [self getMutableAttributes:font];
[mutableAttributedString addAttributes:mutableAttributes range:NSMakeRange(0, [mutableAttributedString length])];
return mutableAttributedString;
}
- (NSMutableDictionary *)getMutableAttributes:(UIFont *)font
{
NSMutableDictionary *mutableAttributes = [NSMutableDictionary dictionary];
[mutableAttributes setObject:font forKey:(NSString *)kCTFontAttributeName];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.alignment = NSTextAlignmentLeft;
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
paragraphStyle.lineSpacing = 3.;
[mutableAttributes setObject:paragraphStyle forKey:(NSString *)kCTParagraphStyleAttributeName];
return mutableAttributes;
}
计算高度
- (CGFloat)mDetailLabelHeitht:(NSString *)detailLabelStr :(NSF){
if (![detailLabelStr isKindOfClass:[NSString class]]) {
detailLabelStr = @"";
}
NSString *stringTotal = [detailLabelStr stringByReplacingOccurrencesOfString:@" " withString:@"\t"];
CGSize size = [stringTotal boundingRectWithSize:CGSizeMake((SCREEN_BOUNDS - 20.0-25.0), CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:[self getMutableAttributes:self.mDetailLabel.font] context:nil].size;
return size.height;
}
swift 版本
let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: str)
let paragraphStyle: NSMutableParagraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .justified
paragraphStyle.lineBreakMode = .byWordWrapping
paragraphStyle.lineSpacing = 4.0
attributedString.addAttributes([.font : UIFont.systemFont(ofSize: 15), .paragraphStyle: paragraphStyle], range: NSMakeRange(0, str.count))
计算高度
func height(text: String) -> CGFloat {
// 注意这里的宽度计算,要根据自己的约束来计算
let maxSize = CGSize(width: (WIDTH() - 30), height: CGFloat(MAXFLOAT))
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .justified
paragraphStyle.lineBreakMode = .byWordWrapping
paragraphStyle.lineSpacing = 4.0
let labelSize = NSString(string: text).boundingRect(with: maxSize,
options: [.usesFontLeading, .usesLineFragmentOrigin],
attributes:[.font : UIFont.systemFont(ofSize: 15), .paragraphStyle: paragraphStyle],
context: nil).size
return labelSize.height
}