Ios 打开时,如何将通常位于UIWebView下方的按钮粘贴到键盘上方?
我想在UIWebView下面添加一个按钮和一些其他视图。当键盘打开时,当键盘升起时,这些视图应平滑地设置动画。UIWebView的大小应平滑调整。我目前有以下情况: 无键盘: 键盘: 看起来它工作得很好,但实际上,这是在调整大小过程中的样子: UIWebView的底部立即向上跳跃,键盘平滑调整大小,底部视图稍微落后 我有以下代码:Ios 打开时,如何将通常位于UIWebView下方的按钮粘贴到键盘上方?,ios,cocoa,ios6,ios7,Ios,Cocoa,Ios6,Ios7,我想在UIWebView下面添加一个按钮和一些其他视图。当键盘打开时,当键盘升起时,这些视图应平滑地设置动画。UIWebView的大小应平滑调整。我目前有以下情况: 无键盘: 键盘: 看起来它工作得很好,但实际上,这是在调整大小过程中的样子: UIWebView的底部立即向上跳跃,键盘平滑调整大小,底部视图稍微落后 我有以下代码: - (void)registerForKeyboardNotifications { [[NSNotificationCenter defaultCen
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleKeyboardWillChangeFrameNotification:)
name:UIKeyboardWillChangeFrameNotification object:nil];
}
- (void)handleKeyboardWillChangeFrameNotification:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
NSTimeInterval animationDuration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
if (!self.is_keyboard_open) {
self.bottom_constraint_constant = self.bottomConstraint.constant;
self.bottomConstraint.constant = kbSize.height + self.bottomConstraint.constant;
} else {
self.bottomConstraint.constant = self.bottom_constraint_constant;
}
[UIView animateWithDuration:animationDuration animations:^{
[self.view layoutIfNeeded];
}];
self.is_keyboard_open = !self.is_keyboard_open;
}
底部约束是文本和屏幕底部之间的约束
我遇到的另一个问题是,当多次切换键盘时,UIWebView在打开时无法正确调整大小,从而导致部分渲染,以及底部出现一个大的灰色框(我可以将其与其余内容一起上下滚动,如果此灰色框不存在,则通常适合此内容),如下所示:
我能做什么?谢谢你的帮助 应设置约束更改的动画。您拥有通知用户信息中所需的所有信息(
UIKeyboardAnimationCurveUserInfoKey
,UIKeyboardAnimationDurationUserInfoKey
)
我认为,您的第二个问题是UIWebView
的问题。我也有这个问题。在iOS7中,苹果似乎试图为webview滚动视图设置内容插入,但有时失败得很惨。我最后做了一些卑鄙的把戏来阻止webview这样做
附录
如何使用动画曲线
网络视图技巧
我们的webview使用更加复杂,因为我们使用contentEditable=YES
来编辑HTML内容。我们所做的是完全控制内部webview子视图
通常,UIWebView的视图层次结构是:
UIWebView
- 私有
子类UIScrollView
- 绘制实际内容的专用视图
- 私有
frame
属性上使用键值观察来监听大小的更改。为了获得正确的内容插入,我们使用键盘框架来确定底部内容插入的大小
我必须面对这一点,并说,理想情况下,我们不应该这样做。它容易出错。根据经验,我们知道它可以从iOS5运行到iOS7.1。我不能保证它能在iOS8上工作。但由于存在无法解决的错误,这是我们找到的最佳解决方案。这是否意味着我应该将
self.bottomConstraint.constant
的更新移动到animateWithDuration
主体?另外,请详细说明UIWebView的技巧。谢谢嗯,现在我想起来了,你的方法应该足够制作动画了。使用断点检查动画持续时间是否为非零值。我将在编辑中详细阐述我的技巧。在肉眼看来,动画看起来不错。只有当我在中间截屏时,它看起来很奇怪。不好的部分是webview的内容立即跳起,而不是平滑地调整大小。我还保留了实际webview内容下的灰色空间。另一方面,我将动画选项更改为(uiviewmanimationoptions)[info-objectForKey:uikeyboardanimationcurveueserinfo]
,这导致动画行为非常怪异。我现在要删除这个选项。你不是这样使用它的!我也会编辑相关信息。明白了,谢谢你的帮助!正如你所知道的,我对iOS开发相当陌生。
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
// ... do stuff here
[UIView commitAnimations];