Phonegap:完全从iPhone键盘上移除黑条

has*_*sen 12 iphone objective-c soft-keyboard cordova

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

/sf/answers/649321641/

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

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

我们遇到的具体问题:

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

当我们关注/键入消息字段时,系统会向上推动视图.看起来这是一种机制,可确保文本字段在用户输入时不可见.

这是发生即使文本字段可见的.

我注意到,通过将输入字段放在黑色条通常位于正上方的位置(与其背后相对),视图不会滚动.

所以系统似乎认为黑条仍在那里!

(要仔细检查:当黑色条未被移除时,我们将文本字段放在它上方,我们可以对焦并输入它,并且视图不会滚动).

所以问题是:

为什么"系统"会在编辑一个文本字段时推送内容,该文本字段位于黑色条应该位于"后面"的位置?是因为黑条还没有被完全移除吗?我们需要做些什么来"完全"去除黑条吗?我们是否需要强制iOS重新计算键盘的大小?或究竟是什么?

这个机制(推高视图)是由iOS的UIWebView或Phonegap实现的吗?

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

小智 9

更换

[subviewWhichIsPossibleFormView removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)

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

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

[subviewWhichIsPossibleFormView removeFromSuperview];
[webScroll setFrame:newFrame];
Run Code Online (Sandbox Code Playgroud)

它调整内容滚动视图的大小,以减少缺少附件空间的数量.它使用"私有API"作为其他代码.详细说明,它不直接使用私有API,但如果Apple决定更改视图的显示方式(在本例中为Keyboard和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
}
Run Code Online (Sandbox Code Playgroud)

  • @relikd在ios5上运行完美.但是在ios6上,黑色条纹的顶部有一条细黑线.关于如何摆脱这个的任何想法? (4认同)