iOS UITextView 高度随文字自动增加,并跟随键盘移动(二)

 

iOS UITextView 高度随文字自动增加,并跟随键盘移动(二)

标签: iOStextview高度自动增加
  1056人阅读  评论(0)  收藏  举报
  分类:

上节地址:http://blog.csdn.net/lwjok2007/article/details/47401293

接着上节我们来实现 输入框自动调节高度

首先,我们得知道,要判断是否该换行了 前提是得知道 一行可以输入多少文字,

我们很容易能知道我们输入框的宽度,那么下来只要知道每个文字的宽度就可以计算一行文字的个数了

然后根据文字文字高度计算每超过一行我们需要给textView 添加的高度


首先要计算每个文字的宽度和高度(我们按照正方形处理)

我们用到了 一个方法 sizeWithAttributes

他为我们提供了计算文字大小的方法,具体大家可以去研究api 这里我们直接使用

首先新建一个变量

[objc]  view plain copy
  1. float heightText;//文字高度  


然后使用该方法计算高度(前提是,文字的大小得提前知道,我们就按照20 计算)

[objc]  view plain copy
  1. NSDictionary *dict=@{NSFontAttributeName:[UIFont systemFontOfSize:20.0]};  
  2. CGSize contentSize=[@"我" sizeWithAttributes:dict];  
  3. heightText=contentSize.height;  


接下来我们需要在文本框内容变化的时候计算所有文字的长度,判断是否超过了文本框宽度

实现 UITextViewDelegate 协议的 

-(void)textViewDidChange:(UITextView *)textView  方法检测文字修改

[objc]  view plain copy
  1. @interface CommentView()<UITextViewDelegate>  

[objc]  view plain copy
  1. -(void)textViewDidChange:(UITextView *)textView  
  2. {  
  3.     float currentLineNum=1;//默认文本框显示一行文字  
  4.     float textViewWidth=self.textView.frame.size.width;//取得文本框高度  
  5.     NSString *content=textView.text;  
  6.     NSDictionary *dict=@{NSFontAttributeName:[UIFont systemFontOfSize:20.0]};  
  7.     CGSize contentSize=[content sizeWithAttributes:dict];//计算文字长度  
  8.     float numLine=ceilf(contentSize.width/textViewWidth); //计算当前文字长度对应的行数  
  9.    
  10.       
  11.     if(numLine>currentLineNum ){  
  12.         //如果发现当前文字长度对应的行数超过。 文本框高度,则先调整当前view的高度和位置,然后调整输入框的高度,最后修改currentLineNum的值  
  13.         self.frame=CGRectMake(self.frame.origin.xself.frame.origin.y-heightText*(numLine-currentLineNum), self.frame.size.widthself.frame.size.height+heightText*(numLine-currentLineNum));  
  14.         textView.frame=CGRectMake(textView.frame.origin.x, textView.frame.origin.y, textView.frame.size.width, textView.frame.size.height+heightText*(numLine-currentLineNum));  
  15.         currentLineNum=numLine;  
  16.     }else if (numLine<currentLineNum ){  
  17.         //次数为删除的时候检测文字行数减少的时候  
  18.         self.frame=CGRectMake(self.frame.origin.xself.frame.origin.y+heightText*(currentLineNum-numLine), self.frame.size.widthself.frame.size.height-heightText*(currentLineNum-numLine));  
  19.         textView.frame=CGRectMake(textView.frame.origin.x, textView.frame.origin.y, textView.frame.size.width, textView.frame.size.height-heightText*(currentLineNum-numLine));  
  20.         currentLineNum=numLine;  
  21.     }  
  22.   
  23. }  





好了 下来我们尝试 测试一下 看效果出来没


最后再给大家提点小问题 尝试解决一下

比如说我们做评论view 行数不能无限增长要不然超出了屏幕。

我们如果限制文本框最高三行,超过三行的时候就不再增加,让文本框通过滑动解决,同时删除的时候也要让文本框高度减小最少一行

大家可以试试


有什么问题可以加群讨论


代码上传至群空间 【文本框高度自动调整1.zip
苹果开发群 :414319235  欢迎加入  欢迎讨论问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值