iOS 13 Анимация вида без смены кадра

У меня есть приложение, скомпилированное в Xcode 10 на симуляторе iOS 13. В одном представлении есть вид "трей", который показывает снизу при тапе, в iOS 12 работает отлично, в iOS 13 тап вызывает метод, но изменения во фрейме не сохраняются - я включил выходы из отладчика в комментариях, чтобы вы могли видеть, каковы выходные значения кадров;

- (void) userClickActivityTray: (UITapGestureRecognizer *) gestureRecognizer {
if(self.activityTrayShown) {
    /*
     (lldb) po self.activityTrayContainerView.frame
     (origin = (x = 0, y = 792), size = (width = 414, height = 104))
     */
    [self hideActivityTray];
} else {
    if (!self.activityTrayViewInitialFrameComputed) {
        self.activityTrayViewInitialFrameComputed = YES;
        self.activityTrayInitialFrame = self.activityTrayContainerView.frame;
    }

    /*
     (lldb) po self.activityTrayContainerView.frame
     (origin = (x = 0, y = 638), size = (width = 414, height = 224))
     (origin = (x = 0, y = 638), size = (width = 414, height = 224))

     (lldb) po self.activityTrayInitialFrame
     (origin = (x = 0, y = 792), size = (width = 414, height = 104))
     (origin = (x = 0, y = 792), size = (width = 414, height = 104))

     (lldb)
     */

    [UIView animateWithDuration:0.25 animations:^{
        self.activityTrayContainerView.frame = CGRectMake(self.view.bounds.origin.x,
                                                          self.bottomView.frame.origin.y - self.activityTrayViewController.maximumHeight,
                                                          self.view.bounds.size.width,
                                                          self.activityTrayViewController.maximumHeight);

        self.activityTrayBackgroundView.alpha = 1.0;
        self.bottomView.alpha = self.dotsProgressView.alpha = 0;
    } completion:^(BOOL finished) {
        self.activityTrayShown = YES;
        /*
         (lldb) po self.activityTrayContainerView.frame
         (origin = (x = 0, y = 557), size = (width = 414, height = 305))
         (origin = (x = 0, y = 792), size = (width = 414, height = 104))
         */
    }];
}

}


person ColinMasters    schedule 21.08.2019    source источник
comment
Проблема решена для вас?   -  person Bharath    schedule 20.09.2019


Ответы (4)


Система раскладки в iOS 13 отличается, у нас была та же проблема, и в нашем случае переключение layout с automatic на Translates Mask Into Constraints устранило проблему.

введите описание изображения здесь

person Amir.n3t    schedule 20.09.2019
comment
@ Amir.n3t, вы правы, это решает проблему, но создает другие проблемы. Я не думаю, что это правильное утверждение, чтобы просто перейти на старый макет. Вместо анимации на кадре вы должны делать это на ограничениях. - person martinmose; 27.09.2019
comment
@martinmose Преобразование масок в ограничения всегда было включено по умолчанию при определении представления в коде. Это не отключает какую-либо функцию, какую проблему это вызвало у вас? Документация для справки :-) ссылка на код - person Amir.n3t; 30.09.2019
comment
Вы спасатель! @ Амир.n3t - person David Chopin; 07.10.2019
comment
Как ни странно, это дает разную ширину для моего UIView в iPhone 8 plus и iPhone X :( - person sandpat; 04.11.2019

Вы можете использовать yourview.layer.frame вместо yourview.frame. Мне это помогло.

person Paul Ho    schedule 02.10.2019
comment
Пол Хо, ты помог мне, как Бог. Большое спасибо за ваш ответ. - person KSR; 03.05.2021

У меня была такая же проблема при переходе на iOS13. В моем случае ограничения по размеру преобладали над любыми изменениями, которые я вносил во фрейм, чего не было в iOS12. Чтобы мое приложение работало правильно, мне также пришлось обновить NSLayoutContraint непосредственно перед блоком «animateWithDuration», чтобы новые координаты кадра оставались совместимыми с ограничениями макета. надеюсь, это поможет

person Frank    schedule 19.09.2019

только установите для .translatesAutoresizingMaskIntoConstraints View значение YES, у меня это сработало. надеюсь, это поможет

person Peter Nguyen    schedule 15.10.2019