Subview не двигается вместе со своим superview

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

Но по какой-то причине на этот раз подпредставления не двигались вместе со своим суперпредставлением, оно оставалось в прежнем положении.

- (void)writeCommentTapped{

    UIView *writeCommentView = [[UIView alloc]init];
    writeCommentView.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview: writeCommentView];
    [self.view bringSubviewToFront:self.navView];

    self.writeCommentTextView = [[UITextView alloc]init];
    self.writeCommentTextView.backgroundColor = [UIColor blackColor];
    [writeCommentView addSubview:self.writeCommentTextView];
    [self.writeCommentTextView becomeFirstResponder];
    self.writeCommentTextView.returnKeyType = UIReturnKeyDefault;

    writeCommentView.frame = CGRectMake(0, -self.view.frame.size.height, self.view.frame.size.width, self.view.frame.size.height - self.keyboardSize.height);
    self.writeCommentTextView.frame = CGRectMake(0, 0, writeCommentView.frame.size.width - 40, writeCommentView.frame.size.height - 100);
    self.writeCommentTextView.center = writeCommentView.center;


    [UIView animateWithDuration:0.15
                          delay:0.0
                        options:UIViewAnimationOptionCurveEaseOut
                     animations:^{

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

                     } completion:^(BOOL finished){
                         if (finished) {

                         }
                     }
     ];

}

1 ответ

Решение

Удалите self.writeCommentTextView.center и установите рассчитанный кадр для центра

-(void)writeCommentTapped{


    UIView *writeCommentView = [[UIView alloc]init];
    writeCommentView.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview: writeCommentView];
    [self.view bringSubviewToFront:self.navView];

    self.writeCommentTextView = [[UITextView alloc]init];
    self.writeCommentTextView.backgroundColor = [UIColor blackColor];
    [writeCommentView addSubview:self.writeCommentTextView];
    [self.writeCommentTextView becomeFirstResponder];
    self.writeCommentTextView.returnKeyType = UIReturnKeyDefault;

    writeCommentView.frame = CGRectMake(0, -self.view.frame.size.height, self.view.frame.size.width, self.view.frame.size.height - self.keyboardSize.height);
    writeCommentView.frame = CGRectMake(0, -self.view.frame.size.height, self.view.frame.size.width, self.view.frame.size.height);


    self.writeCommentTextView.frame = CGRectMake(40/2, 100/2, writeCommentView.frame.size.width - 40, writeCommentView.frame.size.height - 100);
//    self.writeCommentTextView.center = writeCommentView.center;


    [UIView animateWithDuration:0.15
                          delay:0.0
                        options:UIViewAnimationOptionCurveEaseOut
                     animations:^{

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

                     } completion:^(BOOL finished){
                         if (finished) {

                         }
                     }
     ];
}

ИЛИ ЖЕ

self.writeCommentTextView.center = CGPointMake(writeCommentView.frame.size.width/2.0, writeCommentView.frame.size.height/2.0);
Другие вопросы по тегам