在iOS 8中设置自定义键盘高度的动画

时间:2014-10-15 21:29:32

标签: ios ios8-extension ios-autolayout ios-keyboard-extension

我正在尝试使用以下代码在动画中增加自定义键盘的高度。 但我无法弄清楚为什么变化会立即发生,忽略动画。

//In viewDidAppear

[self.view needsUpdateConstraints];
[UIView animateWithDuration:2 animations:^{ 
     CGFloat _expandedHeight = 500;
     NSLayoutConstraint *_heightConstraint = [NSLayoutConstraint 
          constraintWithItem: self.view 
          attribute: NSLayoutAttributeHeight 
          relatedBy: NSLayoutRelationEqual
          toItem: nil 
          attribute: NSLayoutAttributeNotAnAttribute
          multiplier: 0.0 
          constant: _expandedHeight];
     [self.view addConstraint: _heightConstraint];
     [self.view layoutIfNeeded];
}];

3 个答案:

答案 0 :(得分:0)

首先在动画块之外添加约束,然后调用更新约束,并在动画块内部调用layoutIfNeeded .Hope这将起作用

 CGFloat _expandedHeight = 500;
 NSLayoutConstraint *_heightConstraint = [NSLayoutConstraint 
      constraintWithItem: self.view 
      attribute: NSLayoutAttributeHeight 
      relatedBy: NSLayoutRelationEqual
      toItem: nil 
      attribute: NSLayoutAttributeNotAnAttribute
      multiplier: 0.0 
      constant: _expandedHeight];
 [self.view addConstraint: _heightConstraint];
[self.view needsUpdateConstraints];
[UIView animateWithDuration:2 animations:^{ 

 [self.view layoutIfNeeded];
}];

答案 1 :(得分:0)

以下是我用来设置线条中心X位置动画的代码。我已使用IBOutlet NSLayoutConstraint将此行的中心X与某个参考视图中心相连。为了使用autolayout进行动画,需要更新约束并调用动画块内的layoutIfNeeded。这绝对是具有自动布局的动画的想法。

    blueScrollerCenterXConstraint.constant = (btn.tag - 4000)*btn.frame.size.width;
   [blueScroller updateConstraints];

   [UIView animateWithDuration:0.3 animations:^{
    [blueScroller layoutIfNeeded];
}];

答案 2 :(得分:0)

  1. 您不应该在那里添加约束。

  2. 添加并禁用它(或将优先级设置得非常低)。

  3. 之后,将优先级更改为999并在动画块中调用layoutIfNeded。