如何根据UITextView输入的文本更新UITableViewCell的高度

9
我有不同的示例,可以根据增长的UITextView更新UITableViewCell的高度,这对我来说实际上是有效的。我面临的问题是,在UITableViewCell内部UITextView下方有更多的子视图。这样,单元格的高度会更新,但子视图的位置保持不变,导致UITextView和子视图重叠。 只是提一下,我没有使用自动布局。
我该如何解决?
这些是三张截图,将有助于理解我的问题:

1. 在TextView显示之前:

enter image description here

2. 在 TextView 显示后:

enter image description here

3. 在输入文本后:

enter image description here


在您的表视图单元格中,将所有保持固定的子视图放置在一个视图中,当您的UITextview高度发生变化(增加/减少)时,将该视图的y位置设置为UITextview下方。 - Viraj Padsala
你使用的是什么编程语言? - Peter Hornsby
3个回答

3

由于 UITableViewCell 是可重用的,因此在向 contentView 添加对象时,这些对象也会被重复使用而不被删除,导致子视图重叠。解决方法是在你的 cellForRowAtIndexPath 中加入以下代码:

 static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }

    for (UIView * view in [cell.contentView subviews]) {
//        clears the cell before reusing
        [view removeFromSuperview];
    }

希望这能帮到你。

3

我假设您正在为此单元格使用自动布局(但我们可以使用代码示例或Xcode屏幕截图来更具体地帮助您)。如果您正在使用自动布局,则需要确保:

  1. 您在UITextView和单元格下方的其他UIView子视图之间设置了约束
  2. 其他UIView子视图最终被约束到单元格底部。

我没有使用自动布局。如果现在更改它,将是一个巨大的变化。 - Nitish
你需要使用自动布局来调整间距。 - Pankaj Teckchandani

2
你是否正在使用自动布局?虽然我之前多次使用过UITableViewCells,但主要是使用UILabel而不是UITextView。您的问题可能可以通过自动布局解决。您需要将所有子视图(UITableViewCell内部)相对于彼此进行布局。如果一个视图(即UITextView)改变大小,则其他视图将相对于该视图进行调整。以下是一些有用的链接。
这并不特定于UITableViewCell,但具有各种方案的良好示例。 斯坦福大学开发iOS 7应用程序:第9讲 - 动画和自动布局 https://www.youtube.com/watch?v=r1sc7NI6-wo

我没有使用自动布局。如果现在更改它,将是一个巨大的变化。 - Nitish
我明白有些视图可能很难转换到自动布局。请记住,您可以将弹簧和支架与自动布局一起使用。它不必严格是其中之一。您还可以尝试实现一个自定义UIView(.xib),该视图使用自动布局但是作为子视图使用弹簧和支架来隔离您的布局方式。 - xdeleon
我正在使用cellForRowAtIndex方法通过代码创建UITableViewCell的子视图,而不是通过xib文件。 - Nitish
我这样做是因为单元格的用户界面依赖于服务器数据。 - Nitish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接