Phonegap:如何完全移除iPhone键盘上的黑色条?

12
我们正在使用Phonegap开发我们的移动应用程序,并从这里借鉴了代码以去除键盘上的黑色下一个/上一个/完成栏:https://dev59.com/mF7Va4cB1Zd3GeqPN-GR#9276023。该代码找到黑色栏,作为UIView对象,并在其上调用'removeFromSuperview'。
我们不熟悉iOS SDK/API。因此,虽然我们可以查看代码并了解它正在做什么,但我们无法确定它是否正在正确执行,或如何改进它。
我们遇到的具体问题是:
我们有一个用于编写消息的文本字段,并手动控制该字段的放置位置,使其正好位于键盘上方,类似于本机短信应用程序。换句话说,我们将其放在了原来应该有黑色栏的地方。
当我们聚焦/输入消息字段时,系统会将视图向上推。似乎这是一种机制,确保用户在输入时文本字段不会不可见。
即使文本字段可见,这也会发生。
我注意到将输入字段放在黑色栏通常所在的位置(而不是后面),视图就不会滚动。
因此,系统似乎仍然认为黑色栏还在那里!
(为了再次确认:当未删除黑色栏并且我们将文本字段放在其正上方时,我们可以聚焦并在其中键入,视图不会滚动)。
所以问题是:
编辑放在黑色栏正后面的文本字段时,“系统”为什么会将内容向上推?这是因为黑色栏还没有完全移除吗?我们需要做些什么才能“完全”删除黑色栏?我们需要强制iOS重新计算键盘的大小吗?或者还有其他原因?
这种机制(推送视图)是由iOS的UIWebView实现的还是由Phonegap实现的?

有没有使用PhoneGap开发的应用程序解决这个问题?

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,但如果苹果决定更改视图的外观(在这种情况下为键盘和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
}

谢谢,这听起来可能行得通。不过有一件事,我不确定'webb'应该是什么。我尝试了UIScrollView *webScroll = [self.webView.subviews lastObject];但好像不起作用。 - hasen
嗯,那是我的临时webView,一个IBOutlet。但它应该像你尝试的那样工作。请使用NSLog(%@,self.webView.subviews)。也许你有更多的子视图,我只有一个(scrollView)。 - user207616
.scrollView 仅适用于 iOS 5.0 及以上版本;但您需要一个在 4.0 上也能运行的解决方案 ;) … 不过,您可以实现一个开关,如果您喜欢 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0)。但请确保 4.0 的代码按预期工作。 - user207616
4
在iOS 5上,它可以完美地运行。但在iOS 6上,在原本黑色条的顶部有一条细小的黑线。有什么想法可以去掉这个吗? - rlay3
是的,@rlay3,我也遇到了这个问题,你有没有偶然发现解决办法? - Karoh

0

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

你需要知道的是,自Phonegap 2.3.0以来,没有Cordova.plist文件 - 相反,请使用以下内容编辑您的config XML文件:

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

在分支中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接