2014-10-15 10 views
9

Ich habe eine Site mit einer festen Kopfzeile und Slide-Out-Sidebars. Bei iOS7 im Hochformat bleibt die feste Kopfzeile fest, wenn die Seitenleiste sichtbar ist, aber bei iOS8 wird die Kopfzeile leicht nach oben gedrückt, je nachdem, wie weit Sie scrollen. Ich brauche es, um fixiert zu bleiben.Neuer Fixed-Position-Bug auf iOS8

Sehen Sie diese jsbin: http://jsbin.com/xuyevi/2/

Die wichtigsten Stücke sind ein Header, eine Sidebar, und der Hauptinhalt. Der Header ist am oberen Bildschirmrand mit fester Position fixiert und hat einen Z-Index, der beim Scrollen über dem Inhalt bleibt.

Die Seitenleiste ist an der linken Seite des Bildschirms befestigt und wird zunächst durch die Breite nach links verschoben.

Um die Seitenleiste zu öffnen, werden Kopfzeile, Inhalt und Seitenleisten jeweils um die Breite der Seitenleiste nach rechts verschoben.

Auch dies funktioniert perfekt auf iOS7 und allen anderen Browsern, die translate3d unterstützen, und funktioniert sogar in iOS8 im Querformat korrekt. Aber in iOS8 im Hochformat gleitet die feste Kopfzeile vom Bildschirm, je nachdem wie weit der Benutzer gescrollt ist.

Außerdem zeigt der Safari-Inspektor, dass die Menüelemente auf dem Bildschirm von ihren erwarteten Positionen versetzt sind. I.e. Wenn Sie ein Element im Inspektor auswählen, wird ein Bereich auf dem Bildschirm hervorgehoben, der vom tatsächlichen Ort, an dem es gerendert wird, versetzt ist.

Hat jemand anderes in das hineingeraten? Weiß jemand eine Lösung?

EDIT: Der Inspektor denkt, dass die feste Position Header genau ist, wo es sein sollte, obwohl es tatsächlich vom Bildschirm geschoben wird.

+0

Ich begegne dies auch. Ich habe festgestellt, dass bei Verwendung von "Position: Fest" die Containerbreite um etwa 4/3 größer war als die der Eltern. Die Verwendung von ['position: -webkit-sticky'] (http://updates.html5rocks.com/2012/08/Stick-your-landing-position-sticky-lands-in-WebKit) hatte dieses Problem nicht, aber hat in meinem Fall nicht funktioniert (hatte Probleme mit Deckkraft/Hintergrundbild). Wenn/Wenn ich das löse, werde ich hier eine Antwort posten. – iX3

+0

Ich löste dies für unsere Website, indem wir von einem "Push" - zu einem "Dia-Over" -Effekt übergingen. Der Hauptinhalt bleibt jetzt stehen, während die Sidebar und der Header darüber geschoben werden. Ich würde es vorziehen, zurück zum Push zu gehen, wenn ich kann, aber im Moment habe ich nicht die Zeit, mit etwas zu hantieren, das ein Fehler in iOS8 zu sein scheint. –

Antwort

0

Ich habe versucht, etwas Ähnliches zu tun (siehe here und here) dann festgestellt, dass Apple hat eine technical note Empfehlung empfohlen, dass feste Positionierung vermieden werden. Ich schwöre es funktionierte in iOS 7 gut, aber jetzt mit iOS8 "nicht mehr".

Dieses Problem scheint eng verwandt mit diesem Meta-Tag zu setzen:

<meta name="viewport" content="width=device-width"> 

Siehe auch: Fix div to bottom without using css position

+0

Scheint so, als ob es endlich in iOS8.1 unterstützt wird. http://caniuse.com/#feat=css-fixed – juminoz

1

ich auf iOS ein ähnliches Problem hatte mehrere feste Position unter Verwendung von Elementen und eine CSS-animierte off-Leinwand nav . Auf einer langen Seite war die aufwärts gerichtete "Drift" ein Blocker, weil sie schließlich bis zu dem Punkt anstieg, wo sie den Navigationsauslöser verbarg, was es unmöglich machte, das Menü zu schließen. Ich habe ausgiebig versucht, eine Lösung zu finden und mich auf einen Workaround festgelegt: Scrollen Sie nach oben, bevor Sie animieren. (#ocnTrigger ist mein off-Leinwand-Menü Trigger.)

$('#ocnTrigger').click(function(){ 
    $('body').animate({ 
     scrollTop: 0 
    }, 0); 
}); 
4

ein wenig zu spät zur Party, aber das Hinzufügen

html, body { 
    overflow-x: hidden; 
    overflow-y: scroll; 
} 

die Offset-Scrolling auf feste Elemente beheben, die versetzt sind (z. B. links : 20px) in iOS 8.

+0

Dies funktionierte für mich, aber es verursachte einige Leistungsprobleme für mich - sehr langsames Scrollen auf bestimmten Seiten. – Kaganar

+2

@Kaganar versuchen Sie Folgendes: 'Überlauf-y: auto; -webkit-overflow-scrolling: berühren; // Moment Scrollen auf iOS' – mwld

+0

@mwld, Danke für den Tipp - FYI Produkt bereits mit einer anderen Lösung geliefert, aber ich werde definitiv geben, dass eine Aufnahme das nächste Mal, wenn ich es brauche. – Kaganar