2016-03-28 11 views
-2

Ich habe eine Ansicht als Schublade erstellt. Es enthält eine UITableview. Wenn ich UITableview nach unten ziehe, wird die Ansicht durchsucht und die contentoffset.y der UITableview ist immer noch 0; Ich änderte UITableview Rahmen in ScrollViewDidScroll und ScrollViewDidEndDragging, und nach der Animation UITableview scheint immer noch ziehen, dass, wenn ich auf die UITableview klicken wird nicht Zelle ausgewählt, aber VerticalScrollIndicator verstecken, danach UITableview normal zurückkehren.uitableview zeigt immer noch VerticalScrollIndicator beim Ziehen fertig

- (void)moveWithOffset:(CGFloat)offset { 

CGFloat searchBarTop = _searchBar.top; 
    self.height = SCREEN_HEIGHT-NavBar_HEIGHT; 
    if (offset > 0) { 
     if (GestureViewHeight - _searchBar.top > 0.1) { 
      _gestureView.hidden = YES; 
      searchBarTop = (_searchBar.top+offset) < GestureViewHeight ? (_searchBar.top+offset) : GestureViewHeight; 
     } else { 
      _gestureView.hidden = NO; 
      if (self.top < SCREEN_HEIGHT/2) { 
       self.top = (self.top+offset) < SCREEN_HEIGHT/2 ? (self.top+offset) : SCREEN_HEIGHT/2; 
      } 
     } 
    } else if (offset < 0) { 
     if (self.top - NavBar_HEIGHT > 0.1) { 
      _gestureView.hidden = NO; 
      self.top = (self.top+offset) > 64 ? (self.top+offset) : 64; 
      searchBarTop = GestureViewHeight; 
     } else { 
      _gestureView.hidden = YES; 
      if (searchBarTop > 0) { 
       searchBarTop = (_searchBar.top+offset) > 0 ? (_searchBar.top+offset) : 0; 
      } 
     } 
    } 

[self adjustLayoutWithSearchBarTop:searchBarTop]; 

}

- (void)endMoving { 
if ((int)self.top == NavBar_HEIGHT) { 
    _state = ALDHotScenicSpotSearchViewStateUp; 
} else if ((int)self.top == SCREEN_HEIGHT*2/3) { 
    _state = ALDHotScenicSpotSearchViewStateMiddle; 
} else if ((int)self.top == SCREEN_HEIGHT/2) { 
    _state = ALDHotScenicSpotSearchViewStateDown; 
} else { 
    if (self.top < SCREEN_HEIGHT/3 && _state != ALDHotScenicSpotSearchViewStateUp) { 
     _state = ALDHotScenicSpotSearchViewStateUp; 
    } else if (self.top > SCREEN_HEIGHT/3 && _state != ALDHotScenicSpotSearchViewStateDown) { 
     _state = ALDHotScenicSpotSearchViewStateDown; 
    } else { 
     _state = ALDHotScenicSpotSearchViewStateMiddle; 
    } 
} 
[self animatingToState:_state]; 

}

- (void)animatingToState:(ALDHotScenicSpotSearchViewState)state { 
switch (state) { 
    case ALDHotScenicSpotSearchViewStateUp: 
    { 
     [UIView animateWithDuration:0.3 animations:^{ 
      self.frame = CGRectMake(0, NavBar_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT-NavBar_HEIGHT); 
      _gestureView.hidden = YES; 
      [self adjustLayoutWithSearchBarTop:0]; 
     }]; 
    } 
     break; 
    case ALDHotScenicSpotSearchViewStateDown: 
    { 
     [UIView animateWithDuration:0.3 animations:^{ 
      self.frame = CGRectMake(0, SCREEN_HEIGHT/2, SCREEN_WIDTH, SCREEN_HEIGHT/2); 
      _gestureView.hidden = NO; 
      [self adjustLayoutWithSearchBarTop:GestureViewHeight]; 
     }]; 
    } 
     break; 
    case ALDHotScenicSpotSearchViewStateMiddle: 
    { 
     [UIView animateWithDuration:0.3 animations:^{ 
      self.frame = CGRectMake(0, SCREEN_HEIGHT/3, SCREEN_WIDTH, SCREEN_HEIGHT*2/3); 
      _gestureView.hidden = NO; 
      [self adjustLayoutWithSearchBarTop:GestureViewHeight]; 
     }]; 
    } 
     break; 

    default: 
     break; 
} 

}

- (void)adjustLayoutWithSearchBarTop:(CGFloat)top { 
self.frame = CGRectMake(0, self.top, self.width, SCREEN_HEIGHT-self.top); 
_searchBar.frame = CGRectMake(0, top, self.width, 44); 
_tableView.frame = CGRectMake(0, _searchBar.bottom, self.width, self.height-_searchBar.bottom); 

}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { 
if (_isSwiping) { 
    _isSwiping = NO; 
    [self endMoving]; 

} 
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
if (scrollView.contentOffset.y < 0 && !scrollView.isDecelerating && (int)_searchBar.top == 0) { 
    _isSwiping = YES; 
} 
if (_isSwiping) { 
    [self moveWithOffset:-scrollView.contentOffset.y]; 
    scrollView.contentOffset = CGPointMake(0, 0); 
} 

}

+0

Dies passiert nur, wenn ich die Tabellendarstellung schnell nach unten ziehe, wenn ich langsam herunter ziehe, funktioniert es gut – Brazen

Antwort

0

[_tableView setContentOffset: CGPointMake (0, -1) animiert: JA]; [_tableView setContentOffset: CGPointMake (0, 0) animiert: YES]; zur Funktion hinzufügen adjustLayoutWithSearchBarTop wird das Problem beheben. der reasom vielleicht scrollview.isdragging bleibt in scrollViewDidEndDragging wahr.

Verwandte Themen