问题是当UITextField在现有行中有第一个响应者时,UITableView停止向UITableViewDelegate的heightForRowAtIndexPath询问该行的高度应该是什么。
UITableView由三部分构成。每个部分都有一个唯一的行高,以使heightForRowAtIndexPath
看起来类似于以下内容:
-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.Section == 0)
return [tableView rowHeight];
else if (indexPath.Section == 1)
return 88.0;
else if (indexPath.Section == 2)
return 155.0;
cellForRowAtIndexPath
类似,根据要求的部分配置不同类型的自定义UITableViewCell。
这一切都很好用,直到第2节中的许多UITextField之一正在编辑。然后,当用户按下第1部分的插入行时,所有单元格都会动画回到行的iOS默认高度,并且不再调用heightForRowAtIndexPath
的实现。
通过实验我相信它可能与我们如何确保每行中的不同文本字段在键盘上方保持可见有关。控制器订阅键盘willShow和willHide事件,同时跟踪触摸的字段。 willShow的实现调用scrollRectToVisible
给出UITextField的转换帧。