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

最近一个新的需求关于使用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)];
    }
    }

你可能感兴趣的:(iOS 使用UITextView换行,动态改变高度)