上节地址:http://blog.csdn.net/lwjok2007/article/details/47401293
接着上节我们来实现 输入框自动调节高度
首先,我们得知道,要判断是否该换行了 前提是得知道 一行可以输入多少文字,
我们很容易能知道我们输入框的宽度,那么下来只要知道每个文字的宽度就可以计算一行文字的个数了
然后根据文字文字高度计算每超过一行我们需要给textView 添加的高度
首先要计算每个文字的宽度和高度(我们按照正方形处理)
我们用到了 一个方法 sizeWithAttributes
他为我们提供了计算文字大小的方法,具体大家可以去研究api 这里我们直接使用
首先新建一个变量
float heightText;//文字高度
NSDictionary *dict=@{NSFontAttributeName:[UIFont systemFontOfSize:20.0]}; CGSize contentSize=[@"我" sizeWithAttributes:dict]; heightText=contentSize.height;
实现 UITextViewDelegate 协议的
-(void)textViewDidChange:(UITextView *)textView 方法检测文字修改
@interface CommentView()<UITextViewDelegate>
-(void)textViewDidChange:(UITextView *)textView { float currentLineNum=1;//默认文本框显示一行文字 float textViewWidth=self.textView.frame.size.width;//取得文本框高度 NSString *content=textView.text; NSDictionary *dict=@{NSFontAttributeName:[UIFont systemFontOfSize:20.0]}; CGSize contentSize=[content sizeWithAttributes:dict];//计算文字长度 float numLine=ceilf(contentSize.width/textViewWidth); //计算当前文字长度对应的行数 if(numLine>currentLineNum ){ //如果发现当前文字长度对应的行数超过。 文本框高度,则先调整当前view的高度和位置,然后调整输入框的高度,最后修改currentLineNum的值 self.frame=CGRectMake(self.frame.origin.x, self.frame.origin.y-heightText*(numLine-currentLineNum), self.frame.size.width, self.frame.size.height+heightText*(numLine-currentLineNum)); textView.frame=CGRectMake(textView.frame.origin.x, textView.frame.origin.y, textView.frame.size.width, textView.frame.size.height+heightText*(numLine-currentLineNum)); currentLineNum=numLine; }else if (numLine<currentLineNum ){ //次数为删除的时候检测文字行数减少的时候 self.frame=CGRectMake(self.frame.origin.x, self.frame.origin.y+heightText*(currentLineNum-numLine), self.frame.size.width, self.frame.size.height-heightText*(currentLineNum-numLine)); textView.frame=CGRectMake(textView.frame.origin.x, textView.frame.origin.y, textView.frame.size.width, textView.frame.size.height-heightText*(currentLineNum-numLine)); currentLineNum=numLine; } }
好了 下来我们尝试 测试一下 看效果出来没
最后再给大家提点小问题 尝试解决一下
比如说我们做评论view 行数不能无限增长要不然超出了屏幕。
我们如果限制文本框最高三行,超过三行的时候就不再增加,让文本框通过滑动解决,同时删除的时候也要让文本框高度减小最少一行
大家可以试试
有什么问题可以加群讨论
代码上传至群空间 【.zip】
苹果开发群 :414319235 欢迎加入 欢迎讨论问题