分析:
-
允许
label
多行显示.
@property (nonatomic ,weak)UILabel *text_Label;
//label控件属性
textLabelTemp.numberOfLines = 0; //允许多行显示
-
获取文本的真实的
CGSize
NSString 的方法boundingRectWithSize: options: attributes: context:
NSStringDrawingOptions讲解- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary<NSAttributedStringKey, id> *)attributes context:(NSStringDrawingContext *)context; 当前上下文 (哪个字符串调用,'当前上下文'就指哪个) 在指定的矩形内 (size) (CGSizeMake(MAXFLOAT, MAXFLOAT) - 无穷宽, 无穷高的矩形) 根据, 给定选项 (options) (如: 以每行组成矩形的方式来计算整个文本 'NSStringDrawingUsesLineFragmentOrigin') 和显示特性 (attributes) (如: 字体大小) 和绘制'上下文' (context) (可为: nil 如: 绘制过程中最小字体的比例 'minimumScaleFactor') 计算并返回'当前上下文'实际的"边界矩形(X,Y,W,H)"
示例:
CGSize textSize = CGSizeMake(300, MAXFLOAT); //固定宽度,无穷高 NSDictionary *textAttr = @{NSFontAttributeName:[UIFont systemFontOfSize:14]}; // 字体为14 /* 当前上下文(self.text), 在指定的矩形(textSize - 宽为300, 高为无穷高)内, 根据 1. 每行组成一个矩形 2. 字体为14. 的方式计算并返回,当前上下文的实际边界. */ CGRect textRect = [self.text boundingRectWithSize:textSize options:NSStringDrawingUsesLineFragmentOrigin attributes:textAttr context:nil];
-
将值赋给
UILabel
//根据实际的边界,获取真实的高度 CGFloat textH = textRect.size.height; self.text_Label.frame = CGRectMake(X, Y, W, textH);
网友评论