iOS 13 动画视图不改变框架

iOS 13 Animating View Not Changing Frame

我有一个在 iOS 13 模拟器上用 Xcode 10 编译的应用程序。在一个视图中有一个 "tray" 视图,当点击时从底部显示,在 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))
         */
    }];
}

}

我在移动到 iOS13 时遇到了同样的问题。 在我的例子中,大小限制覆盖了我对框架所做的任何更改,iOS12 不是这种情况。 为了让我的应用程序正常工作,我还必须在 "animateWithDuration" 块之前更新 NSLayoutContraint,以便新的框架坐标与布局约束保持兼容。 希望有帮助

iOS13 中的布局系统不同,我们遇到了同样的问题,在我们的案例中,通过将 layoutautomatic 切换到 Translates Mask Into Constraints 解决了这个问题。

您可以使用 yourview.layer.frame 而不是 yourview.frame 它对我有用。

仅将 .translatesAutoresizingMaskIntoConstraints 的视图设置为 YES,它对我有用。 希望有帮助