在 UITableViewCell 中扩展 UITextView 在底部留下间隙

Posted

技术标签:

【中文标题】在 UITableViewCell 中扩展 UITextView 在底部留下间隙【英文标题】:Expanding UITextView in UITableViewCell leaves gap at bottom 【发布时间】:2014-01-16 09:35:37 【问题描述】:

我已经在UITableViewCell 中成功实现了UITextView。我已将UITextField 放入单元格并指定约束,以便文本视图始终距离单元格的顶部和底部 10 个点(因此,当单元格大小增加时,文本视图也会增加):

我还包含以下代码(这似乎是推荐的 ios 7 方式)以从文本视图中删除所有内容插入和填充:

expandingTextViewCell.textView.textContainer.lineFragmentPadding = 0;
expandingTextViewCell.textView.textContainerInset = UIEdgeInsetsZero;

所有单元格高度都存储在一个数组中,-tableView:heightForRowAtIndexPath: 会查询该数组。 我已经在-textViewDidChange: 方法中实现了相关代码,以检查已输入到文本视图中的新文本,重新计算高度,更新数组,然后调用[tableView beginUpdates][tableView endUpdates] 以动画化单元格中的更改高度。这一切都有效,并且文本视图也会调整大小(由于定义的约束):

但是,有一个问题我一直无法解决。当输入足够多的文本导致单元格(和文本视图)扩展时,文本视图会向上滚动 - 这会切断第一行文本,并且还会在文本视图的底部创建一个间隙:

您可以在上面的屏幕截图中看到问题。但是,如果我手动将文本视图滚动回正确的位置,那么一切都显示正常,并且我无法向下滚动文本视图以再次获得间隙,该间隙现在已经消失:

如果单元格/文本视图扩展时出现的空白,我将不胜感激。从用户的角度来看,我只希望文本视图向下增长/扩展,而先前键入的文本仍保留在其原始位置。

【问题讨论】:

【参考方案1】:

我知道这个问题很老了,但同样的问题在 iOS 10 中仍然存在。

对类似问题的回答很有帮助:https://***.com/a/42480403/7604418

您可以向 UITextView 添加一个类别来禁用内容偏移动画,并修复额外的底部偏移:

@implementation UITextView (Scroll)
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated 
    [super setContentOffset:contentOffset animated:NO];

@end

【讨论】:

以上是关于在 UITableViewCell 中扩展 UITextView 在底部留下间隙的主要内容,如果未能解决你的问题,请参考以下文章

使用带有原型单元的自定义 UITableViewCell

仅为 UITableViewCell 的一部分调用 didSelectRowAtIndexPath

如何强制释放 UITableViewCell

保存 UITableviewcell accessoryView 的状态

dequeueReusableCellWithIdentifier、自定义 UITableViewCell 的问题

从 uitableviewcell 获取文本输入