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方法計算高度。