我正在从教程中学习带有动画的自动布局
http://weblog.sivecode.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;
}
我的问题似乎与UIView自动版式动画问题类似
我找到了答案。
代替,
[settingsView layoutIfNeeded];
这条线使它像魅力一样运作,
[self.view layoutIfNeeded];
我想我们需要在父视图上执行layoutIfNeeded方法,而不仅是我们尝试制作动画的视图。
更新:正如codyko的评论中指出的那样,这对于iOS 7,iOS 10是必需的。对于iOS 8,不存在此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句