使用-webkit-overflow-scrolling时触摸的iOS textarea文本:touch

时间:2015-02-25 21:35:50

标签: ios angularjs cordova textarea phonegap-build

我再次来到这里因为我已经用尽了我对这个问题的研究。我有一个非常简单的设置,非常简单的标记,但是非常奇怪的行为。

这种行为与(Firefox and Angular: Textarea placeholder doesn't appear until first focus)非常相似,但我在不同的环境中遇到过这种情况。

考虑带有只读文本区域的代码段。这会带来错误的评论列表,其中2-3个适合屏幕,然后滚动查看更多已加载的评论。

    <div class="row">
        <div class="col-xs-2 text-right font-sm-dark"
             style="height:20px; line-height:20px; font-weight:bold;">
            <label>Comment:</label>
        </div>
        <div class="col-xs-10 text-left font-sm">
            <div class="col-xs-12 text-left font-sm">
                <textarea style="text-align:left; width:100%; padding:0,0; line-height:normal; resize:none;"
                          rows="5"
                          ng-model="comment.Text"
                          readonly></textarea>
            </div>
         </div>
    </div>

在浏览器上运行应用程序(chrome,safari等)时效果很好,但是一旦我使用PhoneGap构建应用程序并在ipad设备上运行它,我就会遇到以下行为:

可见的评论在textareas中已经很好了。当我向下滚动时,请阅读更多评论,他们的textareas是空的但是如果我点击textarea然后文本出现。

Already visible textareas showing their text

滚动后,“注释”框将为空,直到iOS中“点击”。

就是这样,没有与此标记相关的复杂CSS,也没有奇怪的服务器加载问题。加载此区域时,会带来所有注释。

我想指出,这是一款大型移动应用,具有更复杂的标记/功能,可在浏览器上正常运行,并可完美转换为Android和iOS移动应用。

我发布的第一个链接让我觉得ng-touch处理textarea专注于移动客户端时存在一些奇怪的错误。

有什么想法吗?我讨厌转储textareas文本输入,但我几乎就在那时。

2 个答案:

答案 0 :(得分:24)

此问题由容器中的textarea元素使用:

触发
-webkit-overflow-scrolling: touch 

在其父容器中。

删除该类解决了“最初隐藏的文本未加载”但丢失了所需的惯性滚动UX的问题。

添加

-webkit-transform: translateZ(0px) 

我受影响的textarea元素的风格解决了我的问题。

在我的特殊情况下,我不相信我会因为我尚未滚动的隐藏元素而导致严重的性能损失,因为它不会加载丰富的内容(视频/动画/等),这会对移动设备上的VRAM造成负担。我基本上利用了由此触发的额外渲染上下文(硬件辅助),这使我的文本正常渲染,从而绕过了iOS BUG。

关于translateZ(和它的近亲表演translate3d(0,0,0))的重要信息 http://aerotwist.com/blog/on-translate3d-and-layer-creation-hacks/

答案 1 :(得分:0)

似乎在使用时:

A server MUST ignore a Range header field received with a request method other than GET

iOS将表单元素放在奇怪的ignore the Range header位置,该位置在视觉上是隐藏的但仍可单击(知道元素在哪里:可以键入文本,按下按钮等)。在iOS纠正此错误(iOS的Safari和Chrome中都存在)之前,要进行的修补是在所有设置了Process.Start("cmd exe", @"/k C:\Program Files\ExampleApp\test.bat"); 的元素上显式设置较低的-webkit-overflow-scrolling: touch;

例如,如果页面根本不使用z-index,则使用:

z-index

将解决此问题。