Анимировать или просто обновить ограничения работает только на половине просмотров, которые я изменил - PullRequest
1 голос
/ 11 апреля 2019

У меня есть вид контейнера с 4 кнопками ( см. Рисунок )

Я хочу анимировать кнопки 3 и 4 (оба имеют высоту 90) и соответственно изменить вид контейнера

Так что я делаю высоту обеих кнопок равной 0, меняя ее рамку.И измените константу ограничения высоты контейнера с 200 на 100, а затем вызовите layoutIfNeeded.

Я сделал кнопку для тестирования этой дозы.

проблема в том, что происходит только одно из изменений!

- (IBAction)testButton:(UITapGestureRecognizer *)sender {
    CGRect frame = button3.frame;
    frame.size.height = 0;
    button3.frame = frame;
    CGRect frame1 = button4.frame;
    frame1.size.height = 0;
   button4.frame = frame1;
    buttonContainerHeightConstraint.constant = 100;
    [UIView animateWithDuration:0.2 animations:^{
        [self.view layoutIfNeeded];
    }];

когда я нажимаю кнопку тестирования, только контейнер меняет свой размер!кнопки 3 и 4 все еще находятся в одном и том же месте, но, поскольку контейнер имеет высоту 100, теперь они находятся "вне" его.только если я снова нажму на кнопку testButton только тогда, кнопки 3 и 4 исчезнут также

Я подавил ее, чтобы она выглядела так, как я, вероятно, использовал бы ее.

    - (void)showButton3:(Boolean)show {
    CGRect frame = button3.frame;
    frame.size.height = show ? 90 : 0;
    button3.frame = frame;
    [UIView animateWithDuration:0.2 animations:^{
        [self.view layoutIfNeeded];
    }];
}
- (void)showButton4:(Boolean)show {
    CGRect frame1 = button4.frame;
    frame1.size.height = show ? 90 : 0;
    button4.frame = frame1;
    [UIView animateWithDuration:0.2 animations:^{
        [self.view layoutIfNeeded];
    }];
}
- (void)shrinkBtnContainer:(Boolean)shrink {
    buttonContainerHeightConstraint.constant = shrink ? 100 : 200;

    [UIView animateWithDuration:0.2 animations:^{
        [self.view layoutIfNeeded];
    }];
}

- (IBAction)testButton:(UITapGestureRecognizer *)sender {
    [self showButton3:false];
    [self showButton4:false];
    [self shrinkBtnContainer:true];    
}

, и то же самое происходитпосле того, как я нажимаю кнопку, он сначала скрывает контейнер, а если я нажимаю снова, он скрывает кнопки.Так что же я здесь не так делаю?


Примечания: * Я работаю на ios7, поэтому нет stackViews и якорей :( * Я попытался сделать это без блока анимации, и я получил тот же эффект.


РЕДАКТИРОВАТЬ * в конце я удалил ограничение высоты buttonContainer, сделал обе нижние кнопки привязанными к buttonContainer, и когда высота 2 кнопок стала равной 0 (из-за ограничения высоты, а не изменения кадра) контейнера автоматическисжимается с ними, чтобы сохранить нижнее ограничение.

Я все еще хочу знать, почему это не сработало с самого начала, хотя

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