2014-10-10 72 views
0

我有以下代码ScrollRectToVisible不滚动立即

 if(self.roCount < 4) 
     { 
      [self.tableView scrollRectToVisible:CGRectMake(0, 50, 1, 1) animated:NO];  
     } 
     [tableView deleteRowsAtIndexPaths:@[indexPath] 
         withRowAnimation:UITableViewRowAnimationFade]; 

我需要的tableview滚动之前,它会尝试删除该行。这是因为如果我回到最后4行,试图删除它会抛出一个与动画相关的异常,因为我的头文件没有足够的空间来制作动画。

如果我更改此代码以在self.roCount更高时滚动,以便我可以看到它是否可以正常工作,它会滚动,但直到该单元格被删除之后。它应该在它试图删除单元格之前滚动吗?为什么直到单元格被删除后才能看到滚动?

回答

0

当您拨打scrollRectToVisible:并将animated设置为NO时,立即执行,但直到下一个显示周期才显示在屏幕上。

要获得所需的效果,您应该使用动画进行滚动,然后在该动画完成后删除行。

+0

即使我将动画设置为YES,它仍然不会在单元格被删除之前滚动,如果我尝试删除最后4个单元格中的一个(第一个)(导致我目前正在导致引发异常一直滚动到底部,第一个单元格超出了标题视图,所以我只看到它的一半)。 基本上,如果我在删除单元格的行上放置断点,我希望tableview已经滚动到那时。 – user1806716 2014-10-10 16:18:00

+0

正确。在删除行之前,您必须等到动画完成后。一个简单的方法是将删除放入一个单独的选择器中,并使用'performSelector:withObject:afterDelay:' – picciano 2014-10-10 16:25:13

+0

当主线程等待延迟时,它不会锁定主线程吗? – user1806716 2014-10-10 16:29:06