UIView прыгает вниз в начале

#ios #objective-c #uiview

#iOS #objective-c #uiview

Вопрос:

Мне нужно изменить UIView положение при прокрутке tableview . Когда я меняю размер кадра UIView в блоке анимации, он уменьшается, а затем перемещается в правильное положение. Пожалуйста, посмотрите на мой код.

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGPoint scrollVelocity = [_collectionViewLeaderboard.panGestureRecognizer velocityInView:_collectionViewLeaderboard.superview];
if (scrollVelocity.y > 0.0f){
    NSLog(@"going down");
    [UIView animateWithDuration:0.3f
                              animations:^ {

                                  _headerview.frame = CGRectMake(0, 0, _headerview.frame.size.width, _headerview.frame.size.height);

                                  _headerviewSecond.frame = CGRectMake(0, _headerview.frame.size.height, _headerviewSecond.frame.size.width, _headerviewSecond.frame.size.height);

                                  self.collectionViewLeaderboard.frame = CGRectMake(self.view.frame.origin.x, _headerviewSecond.frame.size.height _headerview.frame.size.height, self.view.frame.size.width, self.view.frame.size.height);

                                  frameconditon = _headerview.frame;

                              } completion:^ (BOOL completed) {

                              }];

}
else if (scrollVelocity.y < 0.0f){
    NSLog(@"going up");

    //CGAffineTransform transform = CGAffineTransformMake(1, 0, 0, 1, _headerview.frame.origin.x, _headerview.frame.origin.y);
        [UIView animateWithDuration:5.0 animations:^{
            NSLog(@"test");


            _headerview.frame = CGRectMake(0, -(_headerview.frame.size.height), _headerview.frame.size.width, _headerview.frame.size.height);

            _headerviewSecond.frame = CGRectMake(0, (_headerview.frame.size.height)-40, _headerviewSecond.frame.size.width, _headerviewSecond.frame.size.height);

        } completion:^(BOOL finished) {

        }];


         self.collectionViewLeaderboard.frame = CGRectMake(self.view.frame.origin.x, _headerviewSecond.frame.size.height, self.view.frame.size.width, self.view.frame.size.height);

 }
 }
  

headerview должен переместиться в начало просмотра, и это работает, но когда я запускаю его в первый раз, он опускается и возвращается к правильному положению. Как я буду изменять ограничения во время прокрутки.

Ответ №1:

Для представлений, основанных на ограничениях, попробуйте анимировать с помощью изменения константы constraints, используя выход.