iOS中的多行文本计算,这次是UITextView的多行文本。
注册UITextView的监听代理,当文字发生变化时,执行下面的代码来计算动态高度:
1 - (void)textViewDidChange:(UITextView *)textView 2 { 3 [tableview beginUpdates]; 4 5 CGRect frame = textView.frame; 6 CGSize constraintSize = CGSizeMake(frame.size.width, MAXFLOAT); 7 CGSize size = [textView sizeThatFits:constraintSize]; 8 textView.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, size.height); 9 10 [tableview endUpdates]; 11 }
其中的tableview beginUpdates/endUpdates 是当UITextView控件在Cell中时,当TextView的高度变化时,及时更新Cell。
-----------------------------分割线----------------------------------
也可以用原始的方法计算高度:
大概代码如下:
1 - (void)textViewDidChange:(UITextView *)textView 2 { 3 [tableview beginUpdates]; 4 // 获取原来的 frame 5 CGRect tmpRect = textView.frame; 6 7 UIFont *font = [UIFont systemFontOfSize:14.0]; 8 NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:textView.text attributes:@{NSFontAttributeName: font}]; 9 CGRect rect = [attributedText boundingRectWithSize:(CGSize){kMainScreenWidth-30, CGFLOAT_MAX} 10 options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading 11 context:nil]; 12 13 tmpRect.size.height = rect.size.height + 20; // 20 points for padding 14 15 textView.frame = tmpRect; 16 textView.text = textView.text; 17 18 [tableview endUpdates]; 19 }
这里采用的是boundingRectWithSize方法计算高度。