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

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

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

我们非常easy能知道我们输入框的宽度,那么下来仅仅要知道每一个文字的宽度就能够计算一行文字的个数了

然后依据文字文字高度计算每超过一行我们须要给textView 加入的高度

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

我们用到了 一个方法 sizeWithAttributes

他为我们提供了计算文字大小的方法。详细大家能够去研究api 这里我们直接使用

首先新建一个变量

    float heightText;//文字高度

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

    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 行数不能无限增长要不然超出了屏幕。

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

大家能够试试

有什么问题能够加群讨论

代码上传至群空间 【文本框高度自己主动调整1.zip】

苹果开发群 :414319235  欢迎增加  欢迎讨论问题

iOS UITextView 高度随文字自己主动添加,并尾随键盘移动(二)的更多相关文章

  1. iOS UITextView placeHolder占位文字的N种方法实现方法

    方法一 1.把UITextView的text属性当成“placeholder”使用. 2.在开始编辑的代理方法里清除“placeholder”. 3.在结束编辑的代理方法里根据条件设置“placeho ...

  2. iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧

    1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UIT ...

  3. iOS - UITextView实现placeHolder占位文字

      iOS之UITextView实现placeHolder占位文字的N种方法 前言 iOS开发中,UITextField和UITextView是最常用的文本接受类和文本展示类的控件.UITextFie ...

  4. iOS UITextView 输入内容实时更新cell的高度

    iOS UITextView 输入内容实时更新cell的高度 2014-12-26 11:37 编辑: suiling 分类:iOS开发 来源:Vito Zhang'blog  11 4741 UIT ...

  5. ios swift UITextView高度自适应

    在ios开发中,用到多行输入时一般都会用到UITextView.常见的比如说聊天输入框,评论输入框等,当用户输入多内容时,我们希望高度能根据用户输入的内容扩大而扩大.其实实现这个功能也不是很难,只需要 ...

  6. iOS UITextView自适应高度UITextContainerView抖动问题

    在打造一个类似于微信朋友圈评论输入框的时候,需要动态调整输入框的高度, 但是,在调整了UITextView的高度之后,继续输入会导致内容(UITextContainerView里的文字)抖动. scr ...

  7. Android app开发中用户协议(使用条款)文字自己主动换行

    用户协议(使用条款)文字自己主动换行处理 转载请注明出处:http://blog.csdn.net/u012301841/article/details/46648821 我们在开发app的时候.常常 ...

  8. iOS开发UI篇—在UIImageView中添加按钮以及Tag的参数说明

    ios开发UI篇—在ImageView中添加按钮以及Tag的参数说明 一.tag参数 一个视图通常都只有一个父视图,多个子视图,在开发中可以通过使用子视图的tag来取出对应的子视图.方法为Viewwi ...

  9. ios开发UI篇—在ImageView中添加按钮以及Tag的参数说明

    ios开发UI篇—在ImageView中添加按钮以及Tag的参数说明 一.tag参数 一个视图通常都只有一个父视图,多个子视图,在开发中可以通过使用子视图的tag来取出对应的子视图.方法为Viewwi ...

随机推荐

  1. NVIDIA各个领域芯片现阶段的性能和适应范围

    NVIDIA作为老牌显卡厂商,在AI领域深耕多年.功夫不负有心人,一朝AI火,NVIDIA大爆发,NVIDIA每年送给科研院所和高校的大量显卡,大力推广Physix和CUDA,终于钓了产业的大鱼. 由 ...

  2. 世界上最受欢迎的10个Linux发行版

    帮助新的Linux用户在越来越多的Linux发行版中选择最合适的操作系统,是创建这个网页的原因.它列出了迄今为止最流行的10个Linux发行版(另外增加的是FreeBSD,到目前为止最为流行的BSD系 ...

  3. 牛客多校Round 6

    Solved:3 rank:156 J. Heritage of skywalker 学习一下nth_element 可以o (n)的找出前多少大的元素 #include <bits/stdc+ ...

  4. windows10下win+R快速打开程序

    按下win+R进入运行窗口,输入应用程序名称按下回车键 即可打开该应用,若提示“windows找不到文件”,请看下一步 可以采用建立统一的目录管理,新建目录“F:/local/bin” 将新建目录的路 ...

  5. (C/C++学习)23.C++中指针的长度

    引言:先看下面一个程序会打印出什么? #include<iostream> using namespace std; int main() { int a = 2; int *p = &a ...

  6. C++输入输出重载

    #include <iostream> using namespace std; class Complex2 { public: Complex2(, ) :_x(x), _y(y){ ...

  7. js之DOM直接操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. [bzoj1820][JSOI2010][Express Service 快递服务] (动态规划)

    Description 「飞奔」快递公司成立之后,已经分别与市内许多中小企业公司签订邮件收送服务契约.由于有些公司是在同一栋大楼内,所以「飞奔」公司收件的地点(收件点)最多只有m点 (1, 2, …, ...

  9. idea 如何将本地代码上传到github

    1. 首先切换到项目根目录下 执行 git init 2. 点击项目右键->Git->Repository->Remotes->编辑URL 到github代码地址.

  10. Sublime text如何设置快捷键让编写的HTML文件在浏览器预览?

      STEP 1 Tools->Build System->New Build System STEP 2<img src="https://pic3.zhimg.com/ ...