版权声明:本文为博主原创文章,未经博主允许不得转载。
上节地址: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 欢迎加入 欢迎讨论问题