自更新到iOS8以来,许多动画都停止了工作。看来无法更改视图的y
位置。在iOS7中没有问题。但是对于iOS8,它不会超过原来的y
位置。看起来视图的帧确实正在更新,但帧没有被重绘。这是我的代码
[UIView transitionWithView:self.view duration:0.3 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.table.frame = CGRectMake(0, (self.view.bounds.size.height - self.button.frame.size.height) - (252), self.view.bounds.size.width, self.table.frame.size.height);
} completion:nil];
我也在动画块之外尝试过这段代码;
self.table.frame = CGRectMake(0, (self.view.bounds.size.height - self.button.frame.size.height) - (252), self.view.bounds.size.width, self.table.frame.size.height);
答案 0 :(得分:4)
更新解决方案是调整自动布局约束而不是frames
原点。单击要调整的自动布局约束(在界面构建器中,例如顶部约束)。接下来将其设为IBOutlet
;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *topConstraint;
然后给它制作动画;
self.topConstraint.constant = -100;
[self.viewToAnimate setNeedsUpdateConstraints];
[UIView animateWithDuration:.3 animations:^{
[self.viewToAnimate layoutIfNeeded];
}];
上面的代码将移动视图/或向上移动约束。要将其向下移动到原来的简单调用;
self.topConstraint.constant = 0;
[self.viewToAnimate setNeedsUpdateConstraints];
[UIView animateWithDuration:.3 animations:^{
[self.viewToAnimate layoutIfNeeded];
}];
第二个解决方案
我找到了解决方案。看来如果self.table
是IBOutlet
,那么动画就不会起作用。我猜这是新动态故事板的结果。在代码中而不是在故事板中创建所有元素会导致动画成功。这就是我必须做的就是让它工作,在代码中创建UITableView
。