iOS自动布局动画不';不适用于iOS 7,但适用于iOS 8

iOS自动布局动画不';不适用于iOS 7,但适用于iOS 8,ios,ios7,ios8,autolayout,Ios,Ios7,Ios8,Autolayout,我正在尝试制作一个从左侧滑入的全屏视图的动画,并使用整个空间 我有以下代码,它在iOS 8上完成了预期的工作,但在iOS 7上却没有做到: [source.view addSubview:destination.view]; NSDictionary *viewsDict = @{@"tableView":destination.tableView, @"tapView": destination.tapView,

我正在尝试制作一个从左侧滑入的全屏视图的动画,并使用整个空间

我有以下代码,它在iOS 8上完成了预期的工作,但在iOS 7上却没有做到:

[source.view addSubview:destination.view];

NSDictionary *viewsDict = @{@"tableView":destination.tableView,
                            @"tapView": destination.tapView,
                            @"destinationView": destination.view};

[source.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[destinationView]|" options:0 metrics:nil views:viewsDict]];

source.leftConstraint = [NSLayoutConstraint constraintWithItem:destination.tableView
                                         attribute:NSLayoutAttributeLeft
                                         relatedBy:NSLayoutRelationEqual
                                            toItem:source.view
                                         attribute:NSLayoutAttributeLeft
                                        multiplier:1.0
                                          constant:-source.view.bounds.size.width];

[source.view addConstraint:source.leftConstraint];

source.rightConstraint = [NSLayoutConstraint constraintWithItem:source.view
                                         attribute:NSLayoutAttributeTrailing
                                         relatedBy:NSLayoutRelationEqual
                                            toItem:destination.tapView
                                         attribute:NSLayoutAttributeTrailing
                                        multiplier:1.0
                                          constant:source.view.bounds.size.width];

[source.view addConstraint:source.rightConstraint];

[source.view layoutIfNeeded];

[UIView animateWithDuration:.35f animations:^{

    source.rightConstraint.constant = 0;
    source.leftConstraint.constant = 0;

    [source.view layoutIfNeeded];

}];

当在iOS 7上执行此操作时,
destination.view
会直接添加到屏幕上,而不会出现任何动画。你知道为什么会这样吗?

你的动画块应该只包含
[source.view layoutifneed](请参阅)

应在块之前更改约束,如下所示:

[source.view layoutIfNeeded];

source.rightConstraint.constant = 0;
source.leftConstraint.constant = 0;

[UIView animateWithDuration:.35f animations:^{

    [source.view layoutIfNeeded];

}];

@2012 wwdc第232课时56分钟解释说,您需要设置启动约束,然后调用
layoutifneed
,然后在动画块中-更改约束的常数,然后再次调用
layoutifneed
?这是我代码的来源。从那以后,机制可能已经改变了。我在我的应用程序中使用上述代码,它在iOS 7和iOS 8中都能正常工作。也许你可以试试看它是否有效?你解决了这个问题吗?看到同样的问题,我稍微修改了我的代码,现在我的行为与iOS 7和iOS 8保持一致,但这段代码的行为确实有所不同。