自动布局约束变化并不动画
问题描述:
我从教程自动布局约束变化并不动画
http://weblog.invasivecode.com/post/42362079291/auto-layout-and-core-animation-auto-layout-was
学习与动画自动布局和事情的工作完美。
当我试图在我的应用程序来使用这个概念,试图从底部到顶部动画设定画面(一个UIView),它的伟大工程时,设置屏幕只是一个空的UIView,
但万一我添加一个UILabel作为子视图到这个设置屏幕,动画就消失了。 从设置屏幕删除此UILabel时,动画是可见的。
这里是我已连接
__weak IBOutlet UIView *settingsView;
__weak IBOutlet NSLayoutConstraint *settingsBottomConstraint;
__weak IBOutlet NSLayoutConstraint *settingsViewHeightConstraint;
查看网点没有负载设置方法(setupViews)
-(void)setupViews
{
settingsBottomConstraint.constant = - settingsViewHeightConstraint.constant;
[settingsView setNeedsUpdateConstraints];
[settingsView layoutIfNeeded];
isSettingsHidden = YES;
}
隐藏/取消隐藏方法
- (IBAction)showSettingsScreen:(id)sender {
if (isSettingsHidden) {
settingsBottomConstraint.constant = 0;
[settingsView setNeedsUpdateConstraints];
[UIView animateWithDuration:.3 animations:^{
[settingsView layoutIfNeeded];
}];
}
else{
settingsBottomConstraint.constant = - settingsViewHeightConstraint.constant;
[settingsView setNeedsUpdateConstraints];
[UIView animateWithDuration:0.3 animations:^{
[settingsView layoutIfNeeded];
}];
}
isSettingsHidden = !isSettingsHidden;
}
答
我找到了答案。
相反的,
[settingsView layoutIfNeeded];
这一行做它的工作般的魅力,
[self.view layoutIfNeeded];
我想我们需要在我们试图动画父视图不只是视图执行layoutIfNeeded方法。
UPDATE: 如由codyko评论指出的,这需要的iOS 7,iOS装置10。 对于iOS 8,此问题不存在。
+4
请注意[settingsView layoutIfNeeded]适用于iOS8,但不适用于iOS7。在iOS7中,您需要调用[self.view layoutIfNeeded],但如果您只在iOS8中工作,则无需更新整个视图的约束。 – codyko
你的UILabel有哪些限制? –
@Iftekhar,我试过了两个选项。 1.只需将标签放到UIView中(即不带约束),并且2.将宽度,高度,顶部空间的约束添加到超级视图并导致超级视图。没有工作。 – BangOperator