2013-07-09 24 views
1

我有一個動態的UITableView,它將在單擊按鈕時插入和刪除行。如何讓UIScrollView調用scrollSizeDidScroll,當contentSize減少時

-(IBAction)foldingClicked:(id)sender 
{ 
    self.isInfoFolded = !self.isInfoFolded; 
    if(self.isInfoFolded) 
    { 
     //self.mainTable remove rows 

    }else 
    { 
     //self.mainTable insert rows 
    }  
} 

而我卻在scrollViewDidScroll:

-(void)scrollViewDidScroll:(UIScrollView*)scrollView 
{ 
    CGFloat main_offset = scrollView.contentOffset.y;  
    //animation  
    CGRect image_frame = self.imageView.frame; 
    if((main_offset >= 0) && (main_offset <= self.imageView.frame.size.height)) 
    { 
     image_frame.origin.y = main_offset/2; 
    }else 
    { 
     image_frame.origin.y = image_frame.size.height/2; 
    } 
} 

一些動畫它主要工作正常。但是當我

  1. 單擊按鈕來插入行。 (tableView contentSize增加)
  2. 將表格視圖滾動到一個很大的偏移量。
  3. 點擊按鈕刪除行。 (中的tableView contentSize減少)

結果:由於降低contentSize正在有效contentOffset小過,在此過程中不會調用我的scrollViewDidScroll方法,這使得動畫不完整的,並且留下的表視圖將向上滾動imageView在我的情況下錯誤的位置。

我在移除行後試圖調用scrollViewDidScroll:。但是,scrollViewDidScroll:只被調用一次,contentOffset在該執行中爲'0'。它不是逐漸降到'0'。那麼有沒有什麼辦法讓scrollViewDidScroll像往常一樣被連續調用?

回答

1

您應該使用UITableView的消息

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated 

- (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated 

當你插入或刪除行。然後消息

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

將被自動調用。

+0

它的工作原理!非常感謝! stackOverFlow真的是一個偉大的網站! –

+0

我接受了你的答案。它解決了這個問題幾乎沒有問題。有一個小問題,即最終的contentOffset與contentOffset的表視圖自動調整不一樣。結果並不完美,但足夠好。謝謝。 –

相關問題