12

我们正在使用 Phonegap 开发我们的移动应用程序,我们从这里借用代码来删除键盘上的黑色 next/prev/done 栏:

https://stackoverflow.com/a/9276023/35364

该代码的作用是找到作为 UIView 对象的黑条,并在其上调用“removeFromSuperview”。

我们不熟悉 iOS SDK/API。因此,虽然我们可以查看代码并了解它在做什么,但我们无法判断它是否正确执行,或者如何改进它。

我们遇到的具体问题:

我们有一个用于编写消息的文本字段,我们手动控制该字段的位置,使其正好位于键盘上方,类似于原生短信应用程序。换句话说,我们把它放在应该是黑条的地方。

当我们在消息字段中聚焦/键入时,系统会将视图向上推送。似乎这是一种确保用户键入时文本字段不可见的机制。

即使文本字段可见,也会发生这种情况

我注意到,通过将输入字段放在黑条通常所在的位置上方(与它后面相反),视图不会滚动。

因此,系统似乎以某种方式认为黑条仍然存在!

(仔细检查:当黑条没有被移除时,我们将文本字段放在它的正上方,我们可以聚焦并输入它,并且视图不会滚动)。

所以问题是:

为什么“系统”在编辑位于黑条应该在“后面”的文本字段时将内容向上推?是不是因为黑条还没有完全去掉?我们需要做些什么来“完全”移除黑条吗?我们是否需要强制 iOS 重新计算键盘的大小?或者到底是什么?

这个机制(上推视图)是iOS的UIWebView实现的,还是Phonegap实现的?

有没有解决这个问题的phonegap应用程序?

4

2 回答 2

9

代替

[subviewWhichIsPossibleFormView removeFromSuperview];

UIScrollView *webScroll = [webView.subviews lastObject];
CGRect newFrame = webScroll.frame;

float accesssoryHeight = subviewWhichIsPossibleFormView.frame.size.height;
newFrame.size.height += accesssoryHeight;

[subviewWhichIsPossibleFormView removeFromSuperview];
[webScroll setFrame:newFrame];

它会根据缺少的附件空间量调整内容滚动视图的大小。它与其他代码一样使用“私有 API”。详细地说,它没有直接使用私有 API,但如果 Apple 决定更改视图的显示方式(在本例中为键盘和 WebView),那么它将崩溃。
例如,如果他们重命名UIWebFormAccessory,您的代码将不再工作。

编辑:
在 iOS 5.0+ 上,您可以webView.scrollView直接调用。因此,您可以拆分代码以获得 iOS 5 之前的回退:

UIScrollView *webScroll;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) {
    webScroll = webView.scrollView;
} else {
    webScroll = [webView.subviews lastObject]; // iOS 2.x (?) - 4.x
    // make sure this code runs appropriate on older SDKs
}
于 2012-05-29T09:37:50.470 回答
0

这对我有用:https ://github.com/don/KeyboardToolbarRemover

不过,您必须知道,从 Phonegap 2.3.0 开始没有 Cordova.plist 文件 - 而是使用以下内容编辑您的配置 XML 文件:

<plugin name="KeyboardToolbarRemover" value="KeyboardToolbarRemover" />

在分行

于 2013-02-08T14:34:45.417 回答