2013-10-28 15 views
13

Altta bulunan sabit bir alt çekmeceye sahibim. Dokunduğunda çekmece yukarı kayıyor ve daha fazla içerik gösterecek. IOS 7'de, kullanıcı giriş etiketine veya textarea etiketine dokunduğunda, sanal klavye açılır. Ancak, klavyenin çıktığı zaman, çekmece sayfanın üst kısmına yapışmak yerine yukarı fırlar. Resim için aşağıdaki şemaya bakınız. enter image description hereiOS 7 Krom - Sanal tuş takımı açıldığında sabit konum çekmecesi altta durmuyor

Öncelikle Safari de sorunu yaşamıştır, ama tuş takımı açık olduğunda mutlak sabitlenmiş konumunu değiştirmek için aşağıdaki kodu eklendi:

// Apple.Device detects if it is an apple device 
if (Modernizr.touch && Apple.Device) { 
    /* cache dom references */ 
    var $body = jQuery('body'); 

    /* bind events */ 
    $(document) 
    .on('focus', 'input, textarea', function(e) { 
     $body.addClass('fixfixed'); 
    }) 
    .on('blur', 'input, textarea', function(e) { 
     $body.removeClass('fixfixed'); 
    }); 
} 

CSS kodu:

.fixfixed #drawer { 
    bottom: 0; 
    margin-left: auto; 
    margin-right: auto; 
    position: absolute; 
    left: 0; 
    right: 0; 
} 

Bu düzeltme iOS 7'de Safari'de çalışır, ancak Chrome'da çalışmaz. Ayrıca, bir aylak davranış var:

Sayfada bir giriş etiketi varsa ve iPad'e dokunursam, sanal klavye açılır ve çekmece yukarı çıkar. Çekmecenin daha sonra tıklandığım kapağı kapatması durumunda, tıklama olayı aslında çekmeceye doğru harekete geçer. Neden?

Bu sorunu nasıl çözebilirim? (Bir süredir arıyordum ama iOS'ta Chrome'da nasıl hata ayıklayabilirim?)

Yardımlarınız için çok teşekkürler!

Ben iOS 7'de Krom ise, ben Çekmece gizlemek eğer öyleyse sanal klavye dolduğunda, algılamak ve zaman sanal çekmeceyi yeniden görüntülemek için aşağıdaki kodu kullandım

Güncelleme klavye kapalı.

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)]; 
    } 
} 

var iosVersion = iOSversion(); 

if (navigator.userAgent.match('CriOS') && iosVersion[0] == '7') { 
    $(document).hammer().on('tap', 'input, textarea', function(e) { 
      $('body').addClass('chromefixfixed'); 
     }) 
      .on('blur', 'input, textarea', function(){ 
       body.removeClass('chromefixfixed'); 
      }) 
} 

CSS kodu:

.chromefixfixed #drawer { 
    display: none; 
} 

Hala soru şu: nasıl (klavye dolduğunda çekmeceyi saklamadan) Android'de Chrome gibi çalışmaya iOS 7'de Chrome'u alabilirim?

Yardımın için teşekkürler!

+0

'position: absolute' konumundan 'position: fixed' – Raptor

+0

' .fixfixed' sınıfını kullanmamın nedeni, "position: fixed" öğesinin, Chrome’da ve iOS 7’de Safari’de yukarıda açıklanan aynı soruna sahip olmasıdır. tuş takımı açılır. '.fixfixed' komutunu kullandıktan ve' pozisyon: mutlak 'olarak değiştirildikten sonra (yalnızca tuş takımı dolduğunda), sorun Safari'de çözülür, ancak yine de Chrome'da bulunur. – Yunzhou

cevap

7

Sabit alt konum ve mutlak alt, iOS ve android cihazlarda mutlak bir kabus gibidir, benim tecrübelerime göre, en modern cihazlarda bile tutarlı bir şekilde render etmek mümkün değil şu anda. Öyle ki, bir tasarımcı olarak bir tasarımcıdan düzeni yeniden düşünmesini isterdim. Sanırım buna "çukurun yanından geçiyor" deniyor.