iOS自动布局动画不';不适用于iOS 7,但适用于iOS 8
我正在尝试制作一个从左侧滑入的全屏视图的动画,并使用整个空间 我有以下代码,它在iOS 8上完成了预期的工作,但在iOS 7上却没有做到: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,
[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保持一致,但这段代码的行为确实有所不同。