iOS UITextView 高度随文字自己主动添加,并尾随键盘移动(二)

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

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

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

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

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

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

我们用到了 一个方法 sizeWithAttributes

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

首先新建一个变量

    float heightText;//文字高度

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

    NSDictionary *[email protected]{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 *[email protected]{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  欢迎增加  欢迎讨论问题

时间: 2024-08-25 00:44:29

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

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

上节地址:http://blog.csdn.net/lwjok2007/article/details/47401293 接着上节我们来实现 输入框自动调节高度 首先,我们得知道,要判断是否该换行了 前提是得知道 一行可以输入多少文字, 我们很容易能知道我们输入框的宽度,那么下来只要知道每个文字的宽度就可以计算一行文字的个数了 然后根据文字文字高度计算每超过一行我们需要给textView 添加的高度 首先要计算每个文字的宽度和高度(我们按照正方形处理) 我们用到了 一个方法 sizeWithAt

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

项目中遇到这样一个需求 ,有个文本框,需要随着用户输入的文字多少高度自动增加. 比如说,当用户输入的文字不足一行的时候textview的高度为初始高度, 当输入的文字超过一行,不足两行的时候,我们将textView 的高度调整为显示两行文字的高度. 此处,我们要实现一个评论的功能,还需要输入框跟随键盘移动. 开始代码 首先,我们新建一个类,专门管理输入框,我们起名:CommentView 继承 UIView 为他创建一个UITextView (我们的输入框) #import <UIKit/UIK

iOS IM开发建议(三)添加一个自定义键盘

各类的主流IM,都有自己定义的键盘:有表情键盘,选图片的键盘.其实都是一个inputView. 首先,我们要确定,我们的键盘是输入框调用的.也就是,我们可以设置的是某一个textView的inputView. // 让键盘进入编辑状态,替换输入源为自定义的fv // fv 是一个自定义的UIView - (void)callFaceKeyBoard:(UIButton *)button { [ktextView becomeFirstResponder]; ktextView.inputView

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

在打造一个类似于微信朋友圈评论输入框的时候,需要动态调整输入框的高度, 但是,在调整了UITextView的高度之后,继续输入会导致内容(UITextContainerView里的文字)抖动. scrollRangeToVisible 方法解决了我的问题(Swift 3): textView.scrollRangeToVisible(NSRange.init(location: 0, length: 0)) 获取UITextView内的文字高度以及行数的方法(Swift 3): let heig

IOS 给图片添加水印(文字)

有时候上传图片要加唯一标识,简单的就是添加一个水印.这里水印我们讲文字,可以是当前系统时间.坐标.地理位置等 原理就是把一个字符串写到图片上,并且字(font)的大小由图片大小控制. 以下是封装好的一个类方法: //NavView.m + (UIImage *) addText:(UIImage *)img text:(NSString *)mark { int w = img.size.width; int h = img.size.height; UIGraphicsBeginImageCo

一步一步学ios UITextView(多行文本框)控件的用法详解(五5.8)

本文转载至 http://wuchaorang.2008.blog.163.com/blog/static/48891852201232014813990/ 1.创建并初始化 创建UITextView的文件,并在.h文件中写入如下代码: [csharp] view plaincopy #import <UIKit/UIKit.h> @interface TextViewController : UIViewController <UITextViewDelegate> { UITe

html 富文本编辑器相关--输出选中文字和主动选择文字

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div class="app" contenteditable="true"> <span id="con

一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)

在开发中,经常用到选择多张图片进行上传或作其他处理等等,以下DEMO满足了此功能中的大部分功能,可直接使用到项目中. 主要功能如下: 1,图片九宫格排列(可自动设置) 2,图片长按抖动(仿苹果软件删除时,图标抖动效果),可进入删除状态,再次单击进入普通状态 3,图片设置最大上限,加号按钮自动隐藏 4,已选图片可单击进行重新选择 5,无需代理,直接调用对应属性就可获取所有图片,并与显示顺序保持一致 效果图如下: 1 // 2 // SZAddImage.h 3 // addImage 4 // 5

Zabbix 的Discory功能(主动添加客户端)

Zabbix考虑到绝对多数运维都是苦逼,一个人面对几十还至上百台服务器,如果要把这些服务器一个一个的添加,那么运维将会死于手抽筋或者脑抽筋.于是Zabbix很贴心的发明了主动添加客户端的功能,这样运维就可以悠哉的喝咖啡看电影办公了. 主动添加客户端的前提是,要监控的服务器要安装zabbix_agent.不然都白扯. 首先先打开zabbix的discovery界面,如图所示: 可以看到我已经建立了一个规则,而且在这个规则里,ip是分段的,也是用逗号相隔的.现在我们要新的建立一个规则.于是点击Cre