上节地址: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. [Windows Server 2012] SQL Server 备份和还原方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:SQL S ...

  2. [转]汇编语言:MOVSB,MOVSW,MOVSD

    汇编语言:MOVSB,MOVSW,MOVSD 转自: http://blog.csdn.net/zhenyongyuan123/article/details/8364011   目前80386系列的 ...

  3. vs2017 visual studio2017 密钥 激活码

    企业版Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF 专业版Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH

  4. RabbitMQ系列(二)--基础组件

    声明:对于RabbitMQ的学习基于某课网相关视频和<RabbitMQ实战指南>一书,后续关于RabbitMQ的博客都是基于二者 一.什么是RabbitMQ RabbitMQ是开源代理和队 ...

  5. break和continue在多重循环中使用

    break和continue在多重循环中使用 关于break和continue在java中,break的作用是跳出循环,continue的作用是跳出本次循环. 我们一般情况下,这样使用: public ...

  6. Oracle 11g 字符集修改

    服务端字符集修改 1.确认服务端字符集 select userenv('language') from dual; 2.修改服务端字符集 首先以 DBA 身份登录 Oracle.Windows 系统下 ...

  7. xmpp登录(2)

    XMPP中常用对象们: XMPPStream:xmpp基础服务类 XMPPRoster:好友列表类 XMPPRosterCoreDataStorage:好友列表(用户账号)在core data中的操作 ...

  8. swift中tableview的使用和注意事项

    今天使用swift写了个简单的tableView,语法和用法上跟oc没多大的区别.但是还是有一些细节的地方需要注意一下的. 先上代码 import UIKit class ViewController ...

  9. C++ Primer(第4版)-学习笔记-第3部分:类和数据抽象

    第12章 类       每个类可以没有成员,也可以定义多个成员,成员可以是数据.函数或类型别名. 成员函数必须在类内部声明,可以在类内部定义,也可以在类外部定义.如果在类内部定义,就默认是内联函数. ...

  10. keep

    简介 什么是keepalived呢?keepalived是实现高可用的一种轻量级的技术手段,主要用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生.之所以说keepa ...