详细实现微信输入框效果(textView自适应文字高度)

发表于 2016-08-02 18:30 显示全部楼层 38 6576

前言

最近会不断推出一些轮子,这次写了一个控件,类似微信输入框,评论View,随着文字增加,textView自增长高度
如果喜欢我的文章,可以关注我微博:吖了个峥,也可以来小码哥,了解下我们的iOS培训课程。后续还会更新更多内容,有任何问题,欢迎简书留言峥吖。。。

Demo效果:

304825-2e8eefff9d5f895e.gif

效果图.gif

Demo演示:

1.添加底部View,到最底部

  • 1.1 底部View都是显示到最下面,并且都是固定死的,采用Xib或者storyboard搭建

1.jpeg

2.搭建底部View

2.png


3.png


3.拖线

  • 3.1 获取底部View距离底部的约束,做键盘弹出效果,底部View随着键盘弹出,而往上移动效果

4.png

    // 监听键盘弹出
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];    
    // 键盘弹出会调用- (void)keyboardWillChangeFrame:(NSNotification *)note
{    // 获取键盘frame
    CGRect endFrame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];    
    // 获取键盘弹出时长
    CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];    
    // 修改底部视图距离底部的间距
    _bottomCons.constant = _bottomCons.constant == 0?endFrame.size.height:0;    
    // 约束动画
    [UIView animateWithDuration:duration animations:^{
        [self.view layoutIfNeeded];
    }];
}
// 监听键盘弹出
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];    
// 键盘弹出会调用- (void)keyboardWillChangeFrame:(NSNotification *)note
{    // 获取键盘frame
    CGRect endFrame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];    
    // 获取键盘弹出时长
    CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];    
    // 修改底部视图距离底部的间距
    _bottomCons.constant = _bottomCons.constant == 0?endFrame.size.height:0;    
    // 约束动画
    [UIView animateWithDuration:duration animations:^{
        [self.view layoutIfNeeded];
    }];
}
  • 3.2 获取底部View高度的约束,当文字修改,去修改底部View整体高度

5.png


  • 3.3 获取文本框输入框

6.png


4.监听文本输入框,文字高度改变

  • 修改底部高度约束就好了

// 监听文本框文字高度改变
    _inputView.yz_textHeightChangeBlock = ^(NSString *text,CGFloat textHeight){        
        // 文本框文字高度改变会自动执行这个block,修改底部View的高度
        // 设置底部条的高度 = 文字高度 + textView距离上下间距高度(10 = 上(5)下(5)间距总和)
        _bottomHCons.constant = textHeight + 10;
    };


源码

点击这下载源代码

回复 使用道具
举报
沟里郭嘉身似椅

发表于 2017-02-08 23:41 显示全部楼层

作为新人,在吧里不敢大声说话,也不敢得罪人,只能默默地顶完贴转身就走,不求深藏功与名,只求前排混脸熟

回复 支持 反对 使用道具
举报
p出我世界

发表于 2017-02-08 16:57 显示全部楼层

回复 支持 反对 使用道具
举报
东风玖哥

发表于 2017-02-08 14:56 显示全部楼层

好文章,必须帮顶!!!

回复 支持 反对 使用道具
举报
西山霸王花

发表于 2017-02-08 14:52 显示全部楼层

跟你讲个故事:六一那天我玩lol,我进游戏就打了一句61快乐,有3个人说了谢谢,我赶紧退出,我果断退出游戏。

回复 支持 反对 使用道具
举报
判断力的救赎

发表于 2017-02-08 14:37 显示全部楼层

好文章,必须帮顶!!!

回复 支持 反对 使用道具
举报
涅槃兰心

发表于 2017-02-08 09:00 显示全部楼层

支持!支持!!

回复 支持 反对 使用道具
举报
莨上指

发表于 2017-02-08 05:51 显示全部楼层

  ╭══╮ ┌══════┐

  ╭╯让路║═‖ 酱油专用车 ‖

  ╰⊙═⊙╯ └══⊙═⊙═~. 作为一个资深的酱油党,我们需要做的不仅仅是路过,在路过的同时 还要关心楼主,鼓励楼主,在这个冷漠的时代,给予楼主温暖。酱油党莅临的地方,不仅仅是挽尊,不仅仅是消灭零回复,酱油

回复 支持 反对 使用道具
举报
我爱大菠萝

发表于 2017-02-08 02:37 显示全部楼层

作为新人,在吧里不敢大声说话,也不敢得罪人,只能默默地顶完贴转身就走,不求深藏功与名,只求前排混脸熟

回复 支持 反对 使用道具
举报
PPAP!

发表于 2017-02-07 21:22 显示全部楼层

支持!支持!!

回复 支持 反对 使用道具
举报
1234下一页

发表新文章
袁峥老师

叩丁狼名师团队

1

学分

1050

学币

1140

积分

叩丁狼名师团队

Rank: 5Rank: 5

积分
1140
Ta的主页 发消息
精华帖排行榜

精彩推荐

  • 关注叩丁狼教育