#import <Foundation/Foundation.h>
@interface NSString (Size)
// 真实的高度
+ (CGFloat)getStrH:(CGFloat ) maxW Str:(NSString *)str andFont:(NSInteger) font;
// 向上取整高度
+ (CGFloat)getStrCeilH:(CGFloat ) maxW Str:(NSString *)str andFont:(NSInteger) font;
/**
根据字体、行间距和constrainedWidth计算文本高度
@param font 字体
@param lineSpacing 行间距
@param constrainedWidth 文本受限的宽度
*/
- (CGFloat)getStrH:(UIFont*)font
lineSpacing:(CGFloat)lineSpacing
constrainedWidth:(CGFloat)constrainedWidth;
- (CGFloat)getStrH:(UIFont*)font
lineSpacing:(CGFloat)lineSpacing
constrainedWidth:(CGFloat)constrainedWidth
limitRows:(NSInteger) limitRows;
+ (NSString *)appendStr:(NSString*) str sepStr:(NSString *)sepStr strArray:(NSArray *)strs;
/**
* 是否是空串
*
* @return
*/
-(BOOL)isNull;
/**
* 删除两端空格
*
* @return
*/
-(NSString *)stringDeleteEndsWhiteSpace;
/**
* 删除换行符和两端空格
*
* @return
*/
-(NSString *)stringDeleteWhitespaceAndNewline;
/**
* 删除所有空格
*
* @return
*/
-(NSString *)stringDeleteAllWhiteSpace;
/**
* 删除特定串
*
* @param str 特定串
*
* @return
*/
-(NSString *)stringDeleteStr:(NSString*)str;
/**
* 替换特定串
*
* @param str 旧串
* @param str 新串
*
* @return
*/
-(NSString *)stringReplaceStr:(NSString*)oldStr withStr:(NSString*)newStr;
/**
* 分割
*
* @param str 标志
*
* @return 分割后数组
*/
-(NSArray*)stringCompanentsByStr:(NSString*)str;
/**
* 逆序
*
* @return
*/
-(NSString*)stringReverse;
/**
* c 转 oc
*
* @param str c串
*
* @return oc串
*/
-(NSString*)stringChangeFromeC:(char *) str;
/**
* oc 转 c
*
* @return c 串
*/
-(const char*)cString;
/**
* 特定字符
*
* @param index 索引
*
* @return 特定字符
*/
-(char)charInString:(NSInteger) index;
@end
#import "NSString+Size.h"
@implementation NSString (Size)
// 真实的高度
+ (CGFloat)getStrH:(CGFloat ) maxW Str:(NSString *)str andFont:(NSInteger) font
{
if (!str.length) return 0;
CGRect itemFrame = [str boundingRectWithSize:CGSizeMake(maxW, CGFLOAT_MAX) options: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:font]} context:nil];
return itemFrame.size.height;
}
// 向上取整高度
+ (CGFloat)getStrCeilH:(CGFloat ) maxW Str:(NSString *)str andFont:(NSInteger) font
{
if (!str.length) return 0;
CGRect itemFrame = [str boundingRectWithSize:CGSizeMake(maxW, CGFLOAT_MAX) options: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:font]} context:nil];
CGSize size = itemFrame.size;
return ceil(size.height);
}
- (CGFloat)getStrH:(UIFont*)font
lineSpacing:(CGFloat)lineSpacing
constrainedWidth:(CGFloat)constrainedWidth {
if (!self.length) {
return 0;
}
CGFloat oneLineHeight = font.lineHeight;
CGSize textSize = [self boundingRectWithSize:CGSizeMake(constrainedWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:font} context:nil].size;
CGFloat rows = textSize.height / oneLineHeight;
CGFloat realHeight = (rows * oneLineHeight) + (rows - 1) * lineSpacing;
return realHeight;
}
- (CGFloat)getStrH:(UIFont*)font
lineSpacing:(CGFloat)lineSpacing
constrainedWidth:(CGFloat)constrainedWidth
limitRows:(NSInteger) limitRows{
if (!self.length) {
return 0;
}
CGFloat oneLineHeight = font.lineHeight;
CGSize textSize = [self boundingRectWithSize:CGSizeMake(constrainedWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:font} context:nil].size;
CGFloat rows = textSize.height / oneLineHeight;
if (limitRows > 0 && rows > limitRows) {
rows = limitRows;
}
CGFloat realHeight = (rows * oneLineHeight) + (rows - 1) * lineSpacing;
return realHeight;
}
+ (NSString *)appendStr:(NSString*) str sepStr:(NSString *)sepStr strArray:(NSArray *)strs
{
if (strs.count && sepStr.length)
{
for (NSInteger i = 0; i< strs.count; i++)
{
if (i == 0)
{
if (!str.length)
{
str = [NSString stringWithString:strs[i]];
}
else
{
str = [str stringByAppendingString:strs[i]];
}
}
else
{
NSString *tempStr = [NSString stringWithFormat:@"%@%@",sepStr,strs[i]];
str = [str stringByAppendingString:tempStr];
}
}
}
return str;
}
#pragma mark strAction
-(BOOL)isNull
{
return (!self || [self isEqualToString:@""]) ? YES : NO ;
}
-(NSString *)stringDeleteEndsWhiteSpace
{
return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}
-(NSString *)stringDeleteWhitespaceAndNewline
{
return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
-(NSString *)stringDeleteAllWhiteSpace
{
return [self stringByReplacingOccurrencesOfString:@" " withString:@""];
}
-(NSString *)stringDeleteStr:(NSString *)str
{
return [self stringByReplacingOccurrencesOfString:str withString:@""];
}
-(NSString *)stringReplaceStr:(NSString*)oldStr withStr:(NSString*)newStr
{
return [self stringByReplacingOccurrencesOfString:oldStr withString:newStr];
}
-(NSString*)stringReverse
{
NSMutableString* reveseStr = [NSMutableString stringWithString:self];
for(int i = 0 ; i < self.length; i ++)
{
unichar c = [self characterAtIndex:self.length- i -1];
[reveseStr appendFormat:@"%c",c];
}
return (NSString*)reveseStr;
}
-(NSArray*)stringCompanentsByStr:(NSString*)str
{
return [self componentsSeparatedByString:str];
}
-(NSString*)stringChangeFromeC:(char *) str
{
return [NSString stringWithUTF8String:str];
}
-(const char*)cString
{
return [self UTF8String];
}
-(char)charInString:(NSInteger) index
{
return [self characterAtIndex:index];
}
@end