【发布时间】:2015-02-05 01:01:46
【问题描述】:
在我的 iOS 应用程序中,我在 tableview 单元格中有一个 UITextView。
当用户输入的文本所需的框架超过单元格的当前高度时,UITextView 和单元格高度会扩展。
为了实现上述目的,我调用[tableView beginUpdates] 后跟[tableView endUpdates] 来重新加载单元格的高度。
上面的结果是重复的部分标题与展开的单元格重叠。
有没有办法在不调用[tableView reloadData] 的情况下解决这个问题?
下面附上一些相关代码:
当文本发生变化时,我会验证文本是否适合当前的文本视图,如果不是,则单元格会扩展到新的高度:
- (void)textViewDidChange:(UITextView *)textView {
CGFloat oldTextViewHeight = [(NSNumber *)[self.cachedTextViewHeightsDictionary objectForKey:indexPath] floatValue];
CGFloat newTextViewHeight = [textView sizeThatFits:CGSizeMake(textView.frame.size.width, CGFLOAT_MAX)].height + CELL_HEIGHT_PADDING;
if (newTextViewHeight > oldTextViewHeight ||
(newTextViewHeight != oldTextViewHeight && oldTextViewHeight != TEXTVIEW_CELL_TEXTVIEW_HEIGHT)) {
[self reloadRowHeights];
}
}
- (void)reloadRowHeights {
// This will cause an animated update of the height of the UITableViewCell
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
还需要注意的是,我使用的是自定义部分标题,这使我的问题类似于此处提到的问题: UITableView Custom Section Header, duplicate issue
但是我无法使用上述问题的解决方案,因为我无法在用户输入文本的过程中为 tableView 重新加载数据。
【问题讨论】:
-
向我们展示您的一些代码以帮助我们准确了解您想要实现的目标怎么样?不用担心,我们不会偷任何东西。
-
@ozgurv:我在问题中添加了一些相关代码,以便提供更好的视角。
-
在 beginUpdates/endUpdates 调用之间调用
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone:]时发生了什么? -
当您说“重复的部分标题”时,您到底是什么意思?你在原来的顶部得到了一个新的标题?
-
@joakim:我得到了两个部分标题,一个是它应该在的位置,另一个是在初始位置(在初始位置之后,单元格已经扩展,因此原始标题现在与扩展单元格)。
标签: ios objective-c uitableview header uitextview