您的位置:首页 > 产品设计 > UI/UE

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

2015-08-10 20:26 381 查看
上节地址:http://blog.csdn.net/lwjok2007/article/details/47401293

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

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

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

然后根据文字文字高度计算每超过一行我们需要给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 欢迎加入 欢迎讨论问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: