首页 > 代码库 > iOS UITextView 高度随文字自己主动添加,并尾随键盘移动(二)

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

上节地址: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 高度随文字自己主动添加,并尾随键盘移动(二)