美文网首页
UITableViewCell 高度随 UITextView 内

UITableViewCell 高度随 UITextView 内

作者: 携YOU手同行 | 来源:发表于2020-04-10 16:30 被阅读0次

一、需求定义 :

cell中内容随着输入文字增多或者减少动态变化

最近项目中有这样的一个需求,用户需要添加备注信息。随着UITextView的内容输入变化,动态的改变cell的高度,但是一般项目中使用的UITextView 如果布局限定了,超出了相关的范围的话,UITextView的内容就会超出tableView 的滚动限制,在UITextView内部上下滚动查看,从而实现不了相应的动态变化。基于这样的问题,在自己查找和相关的研究下,实现了相关的项目需求。从而达到了相应的目的。以上只是自己的实现过程,仅供参考,大神请略过。

二、实现思路

布局

相关tableView的布局实现,这个就不用细说了,相信任何一个iOS开发的都会的,
关键的是在布局的时候如果把controller设置为uitextView的代理的话,刷新textView变得十分不便,所以这时候布局的时候应该用uitableViewCell 作为 uitextView的代理,从而监听UITextView的内容变化的时候 controller动态的刷新内容,从而不断计算出相关的高度

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
     TableViewInputViewCell * cell = (TableViewInputViewCell *)[tableView.dataSource tableView:_tableView cellForRowAtIndexPath:indexPath];
    if ([cell CellHeight] < 70) {
        
         return 70;
        
    }else{
        
        return [cell CellHeight];
    }
   
}

在此的时候,可以根据自己的需求设定最小高度,超过这个范围的时候,就会根据输入的内容动态的改变相关输入的高度,如果是删除的时候,如果删除内容高度小于限定高度的时候,会自动保留最小的高度,从而实现项目中的相关根据动态改变高度。

/**
 控制器成功cell的代理,从而实现刷新方法
 */
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    TableViewInputViewCell *cell = [TableViewInputViewCell cellWithTableView:tableView];
    cell.delegate = self;
    cell.indexPath = indexPath;
    cell.tableView = _tableView;
    cell.contentStr= _contentInfoString;
    return cell;

}

控制成为cell的代理过后,需要实现cell的协议方法,从而控制才能根据内容计算实时的高度

#pragma mark ------TableViewInputViewCellDelegate
/**
 刷新内容,控制器根据内容去计算相关的高度
 */
-(void)updatedText:(NSString *)text atIndexPath:(NSIndexPath *)indexPath
{
    _contentInfoString = text;

}

cell的实现过程

cell成为uitextView的代理,从而可以根据uitextViewDelegate下的改变输入方法来告知控制内容发生改变,然后根据tableView的 beginUpdates 和 endUpdates 从而完成一个跟新过程,从而实现一整套连贯的相关通知方法,具体的实现就不多说了,在输入的时候动态的改变相关的控件变化的相关高度,

/**
 输入内容改变的时候,实现刷新相关高度
 */
-(void)updateTheTextHeight
{
    if ([self.delegate respondsToSelector:@selector(updatedText:atIndexPath:)]) {
           [self.delegate updatedText:_infoTextView.text atIndexPath:_indexPath];
       }
       
       CGRect frame = _infoTextView.frame;
       CGSize constraintSize = CGSizeMake(frame.size.width, MAXFLOAT);
       CGSize size = [_infoTextView sizeThatFits:constraintSize];
       _bottomView.frame = CGRectMake(0, 0, k_ScreenWidth, self.contentView.frame.size.height);
       _infoTextView.frame = CGRectMake(15, 10, k_ScreenWidth - 30, _bottomView.frame.size.height - 20);
     
    [_tableView beginUpdates];
    [_tableView endUpdates];
    
    
}

总结

这是本人实现的相关过程,本人实现的Demo地址是:https://github.com/zouyaya/AutoChangInputHeight
相关的实现思路大概就是这样,如果有什么问题还请各位大神多多指教,

相关文章

网友评论

      本文标题:UITableViewCell 高度随 UITextView 内

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