美文网首页iOS 开发继续加油#iOS#HeminWon
iOS 使用UITextView换行,动态改变高度

iOS 使用UITextView换行,动态改变高度

作者: Z_Lukas | 来源:发表于2015-12-15 17:22 被阅读14454次

    最近一个新的需求关于使用UITextView,加在cell上然后随着你输入的文字换行后cell的高度发生变化,下边首先来说下整体思路

    • 首先确认UITextViw什么时候换行,有两种换行,一种是自动换行,但是你获取不到换行符号,所以无法确认它在什么时候会换行,另外一种就是你按下换行按钮“\n”换行

    • 获取到换行的状态后就需要你动态改变下cell的高度以及UItextview的高度

    • 如何计算什么时候换行,我们根据你输入文字的字号大小和UITextView的输入内容来动态计算其高度代码如下:

       /**
        *  自适应字体
        */
       -(CGSize)sizeWithString:(NSString*)string font:(UIFont*)font     width:(float)width {
      
      CGRect rect = [string boundingRectWithSize:CGSizeMake(width,   80000) options:NSStringDrawingTruncatesLastVisibleLine |   NSStringDrawingUsesFontLeading    |NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil];
      return rect.size;
      }
      
    • 然后需要在UITextFielDelegate代理方法里边随着你输入的文字进行修改代码如下:
      -(void)textViewDidChange:(UITextView *)textView{
      //获取文本中字体的size
      CGSize size = [self sizeWithString:textView.text font:QianBaoFont(F3_14) width:textView.width];
      NSLog(@"height = %f",size.height);
      //获取一行的高度
      CGSize size1 = [self sizeWithString:@"Hello" font:QianBaoFont(F3_14) width:textView.width];
      NSInteger i = size.height/size1.height;
      if (i==1) {
      //设置全局的变量存储数字如果换行就改变这个全局变量
      self.number = i;
      }
      if (self.number!=i) {
      self.number = i;
      NSLog(@"selfnum = %ld",self.number);
      self.textView.height = size.height;
      [self.tableView reloadRowsAtIndexPaths:@[self.indexPahth] withRowAnimation:(UITableViewRowAnimationAutomatic)];
      }
      }

    相关文章

      网友评论

      • 为之则易ing:太麻烦了 还有bug 信不信我一行代码搞定 鱼鱼:smile:
        为之则易ing:@取名真鸡巴难 http://www.jianshu.com/p/9e8b1bb986fe
        46cdc68ef124:大神请教下...
      • 海森V:你好,请问一个问题,键盘弹出时 执行这行代码 [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
        键盘会收起,咋让他不收起
        LuffyYa:同问
      • 海森V:谢谢,这逻辑思维佩服
      • 猫佐拉:这个textview的高度变了 但是cell的高度怎么变?只看见你刷新也没有赋值?
        BeImitated:@猫佐拉 cell 的高度是怎么来的你该好好想想, 他的几个代理在你刷新的时候就会调用. 复制过程肯定是在 cell 的代理方法中实现的.

      本文标题:iOS 使用UITextView换行,动态改变高度

      本文链接:https://www.haomeiwen.com/subject/ycbuhttx.html