先日、Phonegap アプリでこの問題に遭遇しましたが、動作は新しい Safari でも一貫しているようです。
私が知る限り、新しい Safari は、キーボードが上にあるときに Web ページに報告されたビューポートのサイズを変更します。高さが 100% のページがあり、ページの下部にナビゲーションが絶対に配置されていました。キーボードが登場すると、ナビも一緒に登場しました。厄介なことに、これにより 2 つの入力フィールドがフォーカスを失い、それらが非表示になり、ログインを完了できなくなりました!
以前は、ビューポート メタ タグでheight=device-heightを使用することを避けていました。以前の Safari はステータス バーについて何も理解していないようで、報告された device-height は常に 20 ピクセル高すぎたため、20 ピクセルのスクロールで非常に表示されていました。ページの下。
私が最終的に使用した修正は、height=device-heightを設定することでした。iOS7 には、ビューポートのサイズ変更/ナビゲーションのオーバーラップに関する問題はありませんでした。驚いたことに、ページはすべてのケースでデバイスの高さの 100% のままでした。
<meta name="viewport" content="width=device-width, height=device-height, user-scalable=no">
この高さ固定の状況を iOS5 および 6 で一貫して動作させるために、デバイスの検出を少し行い、デバイスの高さ (20 ピクセル) を手動で計算し、viewport タグをリセットしました。
function iOSversion() {
if (/iP(hone|od|ad)/.test(navigator.platform)) {
// supports iOS 2.0 and later: <http://bit.ly/TJjs1V>
var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
}
}
ver = iOSversion();
if (ver[0] >= 5 && ver[0] <= 6) {
$('head meta[name="viewport"]').attr("content", "width=device-width, height="+(window.innerHeight-20)+", user-scalable=no")
}
私はこの解決策について少し間違っていると感じていますが、岩 (新しい Safari) と困難な場所 (古い Safari) の間で立ち往生しています。これが私の答えでした。
良い方法を見つけたら、ぜひ教えてください!幸運を :)