UIView transitionWithView&设置框架不再适用于iOS8

时间:2014-09-22 09:15:09

标签: uiview ios8 uiviewanimation

自更新到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);

1 个答案:

答案 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.tableIBOutlet,那么动画就不会起作用。我猜这是新动态故事板的结果。在代码中而不是在故事板中创建所有元素会导致动画成功。这就是我必须做的就是让它工作,在代码中创建UITableView