我有一个UIScrollView,它在显示键盘时调整大小(当它从底部滑入时保持在键盘上方。)为了使动画正常工作,我必须指定UIAnimationOptionBeginFromCurrentState。如果我没有指定这个,我在动画期间会得到奇怪的效果,我可以看到UIScrollView背后的视图。这是动画例程:
- (void) onKeyboardWillShow: (NSNotification*) n
{
// get the keyboard rect
CGRect rKeyboard; NSValue* v;
v = [n.userInfo objectForKey: UIKeyboardFrameEndUserInfoKey];
[v getValue: &rKeyboard];
rKeyboard = [self.view convertRect: rKeyboard fromView: nil];
// get the keyboard animation duration, animation curve
v = [n.userInfo objectForKey: UIKeyboardAnimationDurationUserInfoKey];
double keyboardAnimationDuration;
[v getValue: &keyboardAnimationDuration];
v = [n.userInfo objectForKey: UIKeyboardAnimationCurveUserInfoKey];
UIViewAnimationCurve keyboardAnimationCurve;
[v getValue: &keyboardAnimationCurve];
// animate
[UIView animateWithDuration: keyboardAnimationDuration
delay: 0
options: UIViewAnimationOptionBeginFromCurrentState | keyboardAnimationCurve
animations: ^{
CGRect f = _clientAreaView.frame;
f.size.height = rKeyboard.origin.y - f.origin.y;
_clientAreaView.frame = f;
}
completion: ^(BOOL finished) {
}];
}
问题是UIScrollView backgroundColor,它设置为scrollViewTexturedBackgroundColor。在动画之后,纹理背景被压缩(显示小的伪像)。如果我将它全部设置为原始大小,它将恢复正常。
如何使背景要么不调整动画大小,要么至少将背景“弹出”回到未压缩的外观动画?我尝试在完成例程中设置bg颜色(白色,然后返回scrollViewTexturedBackgroundColor,但这不起作用,我真的不明白为什么。)
答案 0 :(得分:0)
我认为您的问题可能与设置UIKeyboardAnimationCurveUserInfoKey
(UIViewAnimationCurve
而不是UIViewAnimationOption
)以及UIViewAnimationOptionBeginFromCurrentState
(应该是{}}的值相关捕获当前状态并对其进行修改。)
动画UIScrollView
(和UITableView
)的框架在iOS上存在错误,因此您应该为contentInset
和scrollIndicatorInsets
属性以及{{1}设置动画如果您需要重新定位视图(例如,向上移动文本字段)。
只需将键盘的高度添加到插图的底部,然后计算是否需要向上或向下滚动。