最近一个新的需求关于使用UITextView,加在cell上然后随着你输入的文字换行后cell的高度发生变化,下边首先来说下整体思路
首先确认UITextViw什么时候换行,有两种换行,一种是自动换行,但是你获取不到换行符号,所以无法确认它在什么时候会换行,另外一种就是你按下换行按钮“\n”换行
获取到换行的状态后就需要你动态改变下cell的高度以及UItextview的高度
-
如何计算什么时候换行,我们根据你输入文字的字号大小和UITextView的输入内容来动态计算其高度代码如下:
/** * 自适应字体 */ -(CGSize)sizeWithString:(NSString*)string font:(UIFont*)font width:(float)width { CGRect rect = [string boundingRectWithSize:CGSizeMake(width, 80000) options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesFontLeading |NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil]; return rect.size; }
然后需要在UITextFielDelegate代理方法里边随着你输入的文字进行修改代码如下:
-(void)textViewDidChange:(UITextView *)textView{
//获取文本中字体的size
CGSize size = [self sizeWithString:textView.text font:QianBaoFont(F3_14) width:textView.width];
NSLog(@"height = %f",size.height);
//获取一行的高度
CGSize size1 = [self sizeWithString:@"Hello" font:QianBaoFont(F3_14) width:textView.width];
NSInteger i = size.height/size1.height;
if (i==1) {
//设置全局的变量存储数字如果换行就改变这个全局变量
self.number = i;
}
if (self.number!=i) {
self.number = i;
NSLog(@"selfnum = %ld",self.number);
self.textView.height = size.height;
[self.tableView reloadRowsAtIndexPaths:@[self.indexPahth] withRowAnimation:(UITableViewRowAnimationAutomatic)];
}
}