【问题标题】:Phonegap: completely removing the black bar from the iPhone keyboardPhonegap:完全去除 iPhone 键盘上的黑条
【发布时间】:2012-05-31 14:21:38
【问题描述】:

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

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

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

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

我们遇到的具体问题:

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

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

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

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

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

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

所以问题是:

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

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

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

【问题讨论】:

    标签: iphone objective-c cordova soft-keyboard


    【解决方案1】:

    替换

    [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
    }
    

    【讨论】:

    • 谢谢,这听起来可能可行。一件事虽然我不确定'webb'应该是什么。我试过UIScrollView *webScroll = [self.webView.subviews lastObject];,但似乎没有用。
    • ups 是的,这是我的临时 webView,IBOutlet。但它应该像你尝试的那样工作。请NSLog(%@, self.webView.subviews)。也许你有更多的子视图,我只有一个(滚动视图)
    • .scrollView 仅适用于 iOS 5.0+;您要求的解决方案也可以在 4.0 上运行;)……但是如果您喜欢 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0),您可以实现一个开关。但请确保 4.0 的代码按预期工作
    • @relikd 在 ios5 上运行良好。但是在 ios6 上,黑色条的顶部有一条细黑线。关于如何摆脱这种情况的任何想法?
    • 是的@rlay3 这也发生在我身上,你有没有偶然发现一个解决方案?
    【解决方案2】:

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

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

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

    在分支中

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 2015-07-20
      • 2012-03-24
      • 2014-08-14
      • 2011-12-17
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多