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]; // 不加这句也可以
    
  • 相关阅读:
    Android 开发工具类 19_NetworkStateReceiver
    Android 开发工具类 18_NetWorkUtil
    Sticky Footer (让页脚永远停靠在页面底部,而不是根据绝对位置)
    min-height最小高度的实现(兼容IE6、IE7、FF)(解决IE6不兼容min-height)
    不同浏览器设置背景透明度
    讨论内外边距对行内元素是否起作用,则要对行内替换元素和行内非替换元素分别讨论:
    超链接访问过后hover样式就不出现的问题
    解决:子元素设置margin-top,父元素也受影响的问题
    制作0.5px像素的细条
    去掉inline-block元素间隙的几种方法
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5693541.html
Copyright © 2011-2022 走看看