OC_NSAttributedString工具 & 计算size
2018-11-13 本文已影响0人
LiYaoPeng
解决的问题
- 有时候不得不计算文本size,来设置View的size,但是很多时候计算都不准确
- 文本计算代码啰嗦,难懂。
- 获取某行的frame。
- 根据宽度,缩放字体。即: 根据最大宽度,最大字体计算。能让文本全部显示,的最大font
- 限制最大行数与宽度,求最大高度
- 大多数都有链式调用的方法,但是这些方法并不安全,在self为nil的时候,因为传入的self隐藏参数不合法,导致崩溃!!
代码
只用一句话就可以计算高度、宽度
/**
* 获取最大行数
*/
- (NSInteger) getMaxLineWithSize: (CGSize)maxSize ;
- (NSInteger (^)(CGSize maxSize)) getMaxLineWithMaxSize;
/**
获取高度
@param w 约定宽度
@return 特定w下的H
*/
- (CGFloat) getHeightWithWidth: (CGFloat)w;
- (CGFloat(^)(CGFloat w)) getHeightWithMaxW;
/**
获取宽度
@param H 高度
@return 特定H下的W
*/
- (CGFloat) getWidthWithHeight: (CGFloat)H;
- (CGFloat(^)(CGFloat H)) getWidthtWithMaxH;
/**
获取size
@param size 约束的size
@return size
*/
- (CGSize) getSizeWithSize: (CGSize) size;
/**
* @brief 获取某一行的frame,
* @param numberOfLines ,第numberOfLines的frame,
* @warning numberOfLines 从0 开始计数 而不是1
* @warning 如果numberOfLines > 最大行数,那么返回最后一行的frame
* @return 如果没有text,或者attributedString,返回CGRectZero,
*/
- (CGRect) getNumberOfLineFrame:(NSInteger)numberOfLines
andSize:(CGSize)maxSize;
- (CGRect)getLineBounds:(CTLineRef)line
point:(CGPoint)point;
/**
根据 self.attributedString 的length 获取缩放后的font与当前宽度
@param maxWidth 最大宽度
@param maxFont 最大的font
@return 计算后的近似font值与对应的width
@warning 返回的是能全部显示情况下的 最大的Width,与最大font,
@warning self.font 必须是统一字体。不能多字体
*/
- (NSMutableAttributedString *) scaleFontByMaxWidth: (CGFloat)maxWidth
andMaxFont: (UIFont *)maxFont
andBlock: (void(^)(UIFont *font, CGFloat currentWidth))block ;