2013-10-08 6 views
8

Hallo Leute, ich habe gerade von cordova 3.0 auf 3.1 aktualisiert und ich bin immer noch ein sehr beunruhigendes Problem (das immer noch beim KeyboardShrinksView Präferenz existiert).Cordova/Phonegap 3.1 Tastatur (noch) überlagert fokussierte Formularfelder - iOS 7

Immer wenn ich ein Element (Eingabe/textarea) fokussiere, das die Tastaturöffnung auslöst, wird das Element hinter der Tastatur versteckt und ich muss scrollen (mit webkit-overflow-scrolling für das Scrollen übrigens) um das Element und seinen Inhalt zu sehen.

Wenn KeyboardShrinksView auf True gesetzt ist, wird die Seite nicht einmal scrollen, was es noch schlimmer macht.

Irgendwelche Lösungen, um dieses Problem zu beheben? Ich habe ein paar Fragen und Fehlermeldungen gesehen, aber keine funktionierenden Lösungen (oder Lösungen).

Spielen mit der "Vollbild" -Präferenz wird das Problem nicht lösen.

Danke für Ihre Hilfe

+1

Schauen Sie sich [diese Antwort] an (http://stackoverflow.com/a/18991076/503545). Es hat es für mich repariert. – tkh44

+0

Große Antwort! Danke fürs Teilen und es macht die Arbeit automatisch für die Tastatur, aber leider wird meine feste Kopfzeile ausgeblendet (sie ist nicht mehr repariert und scrollt mit der Ansicht). Irgendeine Lösung für diesen Teil? Prost – Alex

Antwort

3

fixierte schließlich das Problem mit Hilfe der folgenden Plugin: jQuery scrollTo plugin

Immer, wenn ich auf einem Elemente bin konzentriert, ich bin ein Fokus-Ereignis ausgelöst, das die folgenden Berechnungen tut und aktualisiert die Scroll-Position:

updateScroll: function(e){ 
    var el = $(e.currentTarget); 
    var offset = -$(".scrollerWrap").height() + $(el).height(); 
    $(".scrollerWrap").scrollTo(el,{offset: offset}); 
} 

Klebt den unteren Rand der Eingabe/Textbereich an die Spitze der Tastatur. Funktioniert wie ein Zauber, selbst wenn die Lösung dieses bisschen JavaScript durchlaufen muss.

+0

Nun, ich habe es nicht persönlich ausprobiert, aber irgendwo gelesen, dass ScrollTo nicht mit Safari in iOS7 funktioniert. –

+2

Funktioniert perfekt für mich :) – Alex

+0

@Alex: Bitte geben Sie weitere Informationen zur Verwendung dieser? –

2

Nun, sollte logischerweise die Ansicht nach oben, wenn die Tastatur öffnet. Ich habe ein ähnliches Problem mit iOS7 konfrontiert und um es zu beheben, habe ich einige CSS-Tweaks angewendet.

Tweaks wurden auf die Wrapper-Klasse/ID angewendet, die den Inhalt der App enthält.

position: relative; 
overflow: hidden; 
height: 460px; 
width: 320px; 

Note - Höhe und Breite dynamisch abhängig von der Gerätehöhe und -breite

height = window.innerHeight 
width = window.innerWidth 

Durch die Verwendung von jQuery Selektoren Höhe und Breite des Einwickeln Klasse/id beigefügten beurteilt.

+0

Vielen Dank für Ihre Hilfe. Ich überprüft für meine Wrapper-Klasse Höhe und es ändert sich, ob die Tastatur angezeigt wird oder nicht, aber der Inhalt nicht "scrollte" auf die fokussierte Eingabe/Textarea, so dass ich selbst scrollen muss, um es anzuzeigen . Ich teste noch einige andere Sachen in Javascript, ich werde Sie über das Ergebnis informieren. – Alex

5

hatte gerade ein sehr ähnliches Problem. Einige der auf dieser Seite gefundenen Hacks funktionierten zwar, hatten aber unangenehme Nebeneffekte (wie Scrollen oder CSS-Layout). Endlich kam ein nagelneuer dummer Hack.

Ansichtsfenster-Meta-Tag:

<meta name="viewport" content="initial-scale=1, maximum-scale=1, width=device-width" /> 

JavaScript nach Last laufen:

document.body.style.height = screen.availHeight + 'px'; 

Und das ist es. Works on iOS 7 und ich habe keine Ahnung, warum.

+0

Das funktionierte perfekt für mich Ich hatte andere Probleme mit der Tastatur die es erforderte "Höhe = Gerätehöhe" im Ansichtsfenster zu setzen, was die Körpergröße (100%) verursachte Ich habe Ihren Code mit dem Code unter https://gist.github.com/shazron/6602131 kombiniert und alles lief reibungslos nach. –

+0

Das ist genial.Ich habe keine Ahnung, warum es funktioniert, aber ich Es funktioniert wirklich! Vielen Dank! – howard10

0

Funktioniert für mich.

document.body.style.height = (screen.availHeight - 100) + 'px'; 
0

Ich denke, die Frage ist hier von Framework7 stammt.

Der obige Code in meiner index.js Datei funktioniert wie Charme.