2012-09-19 115 views
1

我有一個UITableView,我在程序執行過程中動態添加新行。我總是在底部添加新行,當發生這種情況時,我希望表視圖滾動到底部並顯示新行。每次使用動畫時,UITableView都不會滾動到底部

NSInteger oldCount = [self.game count]; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
    //This may take a long time 
    BOOL gameStateChanged = [self.game update] ; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     if (gameStateChanged) 
     { 
      NSMutableArray* ipaths = [NSMutableArray arrayWithCapacity:5]; 
      NSInteger newCount = [self.game count]; 
      for (NSInteger i = oldCount; i < newCount; i++) 
      { 
       [ipaths addObject:[NSIndexPath indexPathForRow:i inSection:0]]; 
      } 
      NSIndexPath* ipath = [ipaths lastObject]; 
      [self.wordsTableView insertRowsAtIndexPaths:ipaths 
             withRowAnimation:UITableViewRowAnimationNone]; 
      [self.wordsTableView scrollToRowAtIndexPath: ipath 
             atScrollPosition:UITableViewScrollPositionBottom 
               animated:YES]; 
     } 
    }); 
}); 

問題是它有時會停止滾動。在它停止滾動之後,它不會在隨後調用相同方法時自動開始滾動,除非用戶手動滾動表視圖。

如果我關閉了滾動的動畫,發送animated:NO,它完美的作品。怎麼會這樣?我怎樣才能使用動畫工作?

回答

0

嘗試等待,直到完成調用方法時...另一種可能性是整合動畫:在動畫塊無功能...

類似的東西:

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.5]; 

[self.wordsTableView scrollToRowAtIndexPath: ipath 
             atScrollPosition:UITableViewScrollPositionBottom 
               animated:NO]; 

[UIView commitAnimations]; 

這是不是真的最好的解決方案但也許這有助於...

+0

通過等待,你的意思是不同時啓動兩個動畫?我嘗試閱讀這種做動畫的方式,它說從iOS 4.0開始它就不鼓勵了。我不想創建自己的動畫,因爲它內置在UITableView中。 – symmetricsaurus