UITableView拉动刷新导致闪烁.怎么预防呢?

aka*_*aru 5 uitableview uikit uiscrollviewdelegate ios pull-to-refresh

我正在做那种下拉到刷新的事情.在scrollViewDidEndDecelerating中,我检查偏移是否超过某个点,并在scrollViewDidEndDragging中设置contentInset,以便保持下拉部分可见.

但是,这会导致闪烁,可能是由于在滚动动画期间重置了contentInset.我想我可以通过在scrollViewWillEndDragging中设置targetContentOffset来阻止这种情况,但它似乎没有做到这一点.

 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{

     if (scrollView.contentOffset.y < -kRefreshViewDelta) 
     {
         self.tableView.contentInset = UIEdgeInsetsMake(kRefreshViewHeight, 0.0f, 0.0f, 0.0f);

     }
}

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
 {
     if (scrollView.contentOffset.y  < -kRefreshViewDelta) 
     {
          targetContentOffset->y = kRefreshViewHeight ;
     }
 }
Run Code Online (Sandbox Code Playgroud)

小智 10

如果您更改分配给UITableView的帧(在滚动期间或其他情况下),它将导致contentInset重置为默认值(0,0,0,0).有一些国家检查我的,但基本上这是我为我做的...

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView
                  willDecelerate:(BOOL)decelerate {
  if (scrollView.contentOffset.y < -kRefreshDeltaY) {
    animation = ^{
        [self setContentInset:UIEdgeInsetsMake(kRefreshDeltaY,
                                                          0, 0, 0)];
    };

    [UIView animateWithDuration:0.3
                          delay:0
                        options:UIViewAnimationOptionAllowUserInteraction
                     animations:animation
                     completion:completion];
  } // if
}
Run Code Online (Sandbox Code Playgroud)

只要我没有布置子视图或更改UITableView的框架,它对我来说就很好.