在我的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重新加载数据。
答案 0 :(得分:0)
尝试实施
tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int)
委托方法,如果你没有
答案 1 :(得分:0)
参加聚会的时间已经很晚了,但是我找不到一个有效的解决方案,然后我想出了一个,所以我想我会分享。
我将UITableViewAutomaticDimension用于单元格高度和截面标题高度。我的标题视图类只是一个UIView子类,根据需要包含一些子视图。在我的tableView(:viewForHeaderInSection:)
类中,我只是根据需要初始化了一个新的标题视图,我遇到了这个重复的标题问题。甚至没有reloadData帮助。
似乎已经为我修复的是为标题实现基本的“单元重用”。像这样:
将标题视图存储在视图控制器中的某个字典中。
class ViewController: UIViewController {
var sectionHeaders: [Int: UIView] = [:]
// etc...
}
然后,根据请求,返回现有的部分标题视图(如果可用),或者创建并存储新的部分。
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if let sectionHeader = self.sectionHeaders[section] {
return sectionHeader
} else {
let sectionHeader = YourSectionHeader()
// Setup as needed...
self.sectionHeaders[section] = sectionHeader
return sectionHeader
}
}