zoukankan      html  css  js  c++  java
  • iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧

    1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现

    • 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UITextView *)textView
    • 通过UITextView的contentSize的高度来决定textView的高度.随着TextView中文字的增多,TextView的contentSize也会随着变化,所以实现这个功能,contentSize是个很重要的属性

    - (void)textViewDidChange:(UITextView *)textView
    {
        CGFloat textViewMinHeight = 33; // TextView最小高度
        CGFloat textViewMaxHeight = 83; // TextView最大高度
        // 重要属性
        CGFloat textViewContentH = textView.contentSize.height;
    
    //    NSLog(@"%@",NSStringFromCGSize(textView.contentSize));
        // 1.计算TextView的高度
        if (textViewContentH < textViewMinHeight) { // 小于最小值的情况
            _textViewHeightConstraint.constant = textViewMinHeight;
        } else if (textViewContentH > textViewMaxHeight) { // 大于最大值情况
            _textViewHeightConstraint.constant = textViewMaxHeight;
        } else { // 其余情况高度随着内容的高度变化
            _textViewHeightConstraint.constant = textViewContentH;
        }
    
        if ([textView.text hasSuffix:@"
    "]) { // 判断是否为发送,就是判断是否有回车符
            NSLog(@"发送消息");
            // 发送消息后,高度复原
            _textViewHeightConstraint.constant = textViewMinHeight;
            [self sendTextMsg:textView.text];
            // 清空内容
            textView.text = nil;
        }
        // 2.计算底部工具条的高度
        self.bottomToolBarHeightConstraint.constant = 8 + 8 + _textViewHeightConstraint.constant;
    
        // 3.添加动画效果
        [UIView animateWithDuration:0.25 animations:^{
            [self.view layoutIfNeeded];
        }];
        // 4.让TextView中的光标回到0位置
    #warning TextView光标复位的小技巧
        [textView setContentOffset:CGPointZero animated:YES]; // 这一句就能够起作用
        [textView scrollRangeToVisible:textView.selectedRange]; // 不加这句也可以
    }
    
    

    2.文本信息点击了发送之后,TextView的光标位置变了

    • 造成这一问题的主要原因是TextView的contentSize变化了,贯标位置就跟着变化了
    • 光标复位小技巧,经过测试只有第一行代码也是可以的
        // 4.让TextView中的光标回到0位置
    #warning TextView光标复位的小技巧
        [textView setContentOffset:CGPointZero animated:YES]; // 这一句就能够起作用
        [textView scrollRangeToVisible:textView.selectedRange]; // 不加这句也可以
    
  • 相关阅读:
    npm教程2
    02.RIP——CCNP学习笔记
    01.静态路由——CCNP学习笔记
    The 10th SWJTU ACM Online Tutorial
    visual studio 2005 常用按键
    Python垃圾回收机制
    私人网盘系统2.0—全部升级为layUI+PHP(持续更新中)
    Layui框架+PHP打造个人简易版网盘系统
    翻译app的开发全过程---编码+打包+上架
    值得认真学习的6 个 JavaScript 框架
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5693541.html
Copyright © 2011-2022 走看看