iOS 使用UITextView计算高度,一行代码搞定

autoframe.gif

看其它文章介绍的方法很多,一般都是计算高度,问题太多。其实没那么麻烦。
一行代码的事;
直接上代码:

-(void)textViewDidChange:(UITextView *)textView{

    float textViewHeight =  [textView sizeThatFits:CGSizeMake(textView.frame.size.width, MAXFLOAT)].height;
    CGRect frame = textView.frame;
    frame.size.height = textViewHeight;
    textView.frame = frame;
}

是不是很简单!!!

当textView高度改变时,textview文字位置显示错误,错位显示,位置偏上

iOS 使用UITextView计算高度,一行代码搞定_第1张图片
Paste_Image.png

解决办法:

textView.scrollEnabled = NO;

当textView放在tableViewCell上,当textView高度改变时需要刷新tableView,

-(void)textViewDidChange:(UITextView *)textView{
    float textViewHeight =  [textView sizeThatFits:CGSizeMake(textView.frame.size.width, MAXFLOAT)].height;
    if (textViewHeight != _cellHeight && textViewHeight > 50) {
        _cellHeight = textViewHeight;
        [_tableView reloadData];
    }
}

此时存在一个问题,键盘会隐藏,解决方法:在tableView代理中重新设为第一响应

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    TestTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TestTableViewCell"];
    cell.textV.delegate = self;
    cell.textV.scrollEnabled = NO;
    cell.textVH.constant = _cellHeight;
    dispatch_async(dispatch_get_main_queue(), ^{//这行代码一定要加上
        [cell.textV becomeFirstResponder];
    });
    return cell;
}

或者

-(void)textViewDidChange:(UITextView *)textView{
    float textViewHeight =  [textView sizeThatFits:CGSizeMake(textView.frame.size.width, MAXFLOAT)].height;
    if (textViewHeight != _cellHeight) {
        _cellHeight = textViewHeight;
        [_tableView reloadData];
        MyTableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
        cell.textViewH.constant = _cellHeight;
        [cell.textView becomeFirstResponder];
    }
}

Demo: https://github.com/GitHubXuLiying/TextViewAutoFrame

个人开发的第一个小程序(计算器UX),大家多多支持


iOS 使用UITextView计算高度,一行代码搞定_第2张图片
计算器.jpg

你可能感兴趣的:(iOS 使用UITextView计算高度,一行代码搞定)