我的iOS屏幕底部有一个页脚UIView大约50像素高。在这个视图的加载阶段,我添加了一个子视图(比如说footer-subview),并以编程方式为所有边添加约束,常量为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];
}
有关如何更快地更新页脚 - 子视图约束的任何提示,以便它们的父级,页脚视图能够很好地生成动画?
答案 0 :(得分: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];
}];
}