0

我的 iOS 屏幕底部有一个大约 50 像素高的页脚 UIView。在此视图的加载阶段,我添加了一个子视图(可以说是页脚子视图),并以编程方式将约束添加到常数为 0 的所有边缘(基本上覆盖整个页脚视图)。

我注册了keyboardWillShow通知,并在其中将约束更改为我的页脚视图(不要与上一段中提到的约束混淆),这只是控制外部页脚视图位置的一个约束),以便它显示在键盘的正上方。理论上改变这个约束应该改变所有相关的约束,特别是我的页脚子视图的外边缘约束。

当键盘显示时,页脚视图与显示键盘的动画一起很好地动画,但是在页脚视图中我的页脚子视图的约束更新有轻微延迟,这会在我的页脚为空白时产生难看的视觉效果一瞬间。

这是我的keyboardWillShowNotifcation的代码

- (void)keyboardWillShow:(NSNotification *)notification
{
  _keyboardIsVisible = YES;
  CGRect keyboardSize;
  [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardSize];
  [UIView animateWithDuration:0.35f
                        delay:0
                      options:UIViewAnimationCurveLinear | UIViewAnimationOptionBeginFromCurrentState
                   animations:^{
                     [_footerTopSpaceConstraint setConstant:-1 * CGRectGetHeight(keyboardSize)];

                     [self.view layoutIfNeeded];
                   }
                   completion:nil];

}

有关如何“更快”更新页脚子视图约束的任何提示,以便它们与其父级页脚视图一起很好地动画?

4

1 回答 1

0

不要害怕打电话setFrame:

- (void)keyboardWillShow:(NSNotification *)notification
{
    _keyboardIsVisible = YES;
    CGRect keyboardSize;
    [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardSize];
    [UIView animateWithDuration:0.35f
                          delay:0
                        options:UIViewAnimationCurveLinear|UIViewAnimationOptionBeginFromCurrentState
                     animations:^{

                         CGRect footerRect = [_myFooterView frame];
                         [_myFooterView setFrame:CGRectOffset(footerRect, 0, -CGRectGetHeight(keyboardSize))];
                     }
                     completion:^(BOOL finished) {

                         [_footerTopSpaceConstraint setConstant:-1 * CGRectGetHeight(keyboardSize)];
                         [self.view setNeedsUpdateConstraints];
                     }];
}
于 2013-09-13T20:31:29.367 回答