当contentSize减少时,如何让UIScrollView调用scrollViewDidScroll

时间:2013-07-09 10:50:47

标签: ios scrollview

我有一个动态UITableView,它会在点击按钮时插入和删除行。

-(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减少)
  4. 结果:表格视图将向上滚动,因为减少的contentSize也会使有效contentOffset变小,在此过程中我的scrollViewDidScroll方法不会被调用,这会导致动画不完整,并且imageView在我的情况下处于错误的位置。

    我尝试在删除行后立即调用scrollViewDidScroll:。但是,scrollViewDidScroll:仅调用一次,而contentOffset为&#39; 0&#39;在那执行。它不是逐渐下降到&#39; 0&#39; 。那么有没有什么方法可以像往常那样连续调用scrollViewDidScroll

1 个答案:

答案 0 :(得分:1)

您应该使用UITableView的消息

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

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

当您插入或删除行时。然后是消息

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

将自动调用。