UIView转换WithView&;在iOS8中设置帧不再有效

UIView转换WithView&;在iOS8中设置帧不再有效,uiview,ios8,uiviewanimation,Uiview,Ios8,Uiviewanimation,自从更新到iOS8以来,许多动画已经停止工作。视图的y位置似乎无法更改。在iOS7中没有问题。但是使用iOS8,它不会超过原始的y位置。看起来视图的框架确实在更新,但框架没有被重新绘制。这是我的密码 [UIView transitionWithView:self.view duration:0.3 options:UIViewAnimationOptionCurveEaseInOut animations:^{ self.table.frame = CGRectMake(0, (self.vi

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

更新解决方案是调整自动布局约束,而不是调整帧原点。单击要调整的自动布局约束(在界面生成器中,例如顶部约束)。接下来将其设置为一个
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

如果有人也被这个问题困扰,那么不要使用[self.view来动画布局子视图];内部动画块,因为它不工作。使用[self.viewToAnimate layoutifneed];相反,@Borzh原始答案是这样说的?是的,我只是想强调需要LayoutFneed方法,而不是LayoutSubview。问题是LayoutSubview在iOS 7.1上工作,但在iOS 8上不工作+