我有一个UITableView,当键盘显示时调整大小。调整大小的UITableView的单元格框架没有更新
// MonoTouch code
// Resize the table so it's not hidden by the keyboard
var keyboardFrame = UIKeyboard.BoundsFromNotification(notification);
var tableFrame = myTable.Frame;
tableFrame.Height = theView.Frame.Height - keyboardFrame.Height;
myTable.Frame = tableFrame;
// Bring the current cell back in view
this.InvokeOnMainThread(()=>{
if(currentCell != null) myTable.ScrollRectToVisible(currentCell.Cell.Frame, true);
});
然而,当我尝试执行对细胞的作用是对在屏幕上,该单元的当前位置(如附接UIPopoverController)敏感,我发现,该小区的帧被示出原始表格调整大小和滚动之前的位置。
我试过以下所有产生仍然指向旧位置的框架的相同结果(很多这些正在试验,看看他们是否做了什么不知道什么会工作,什么不会):
- 在单元格上使用SetNeedsLayout,表的子视图,表。
- 对细胞使用LayoutIfNeeded,表的子视图,表和包含表SetNeedsLayout和LayoutIfNeeded
- 产卵一个新的线程,该线程睡眠的时间荒谬量
- 多种组合的视图(以便有时间对UI进行重绘/更新/不管),然后看帧
- 产生一个新的线程,睡的时间可笑的金额,然后调用不同的布局功能
我不确定它是否是调整大小或t他滚动的是发生故障的地方。
当您使用手势滚动表格时,单元格框架似乎被正确更新,因为我始终可以在相对于我附加到的单元格的正确位置显示弹出视图。所以我不明白为什么调整表格的大小和以编程方式滚动它们的效果不一样。
有谁知道如何强制UITableView更新它的单元格的框架而不做一个ReloadData(ReloadData在这种情况下会导致许多不需要的效果)?