(To pytanie składa się z wielu części, postaram się jak najlepiej podsumować scenariusz.)
Obecnie tworzymy responsywną aplikację internetową (czytnik wiadomości), która pozwala użytkownikom przesuwać zawartość między kartami, a także przewijać zawartość kart w pionie.
Powszechnym podejściem do problemu jest posiadanie opakowania div
wypełniającego okno przeglądarki, ustawionego overflow
na hidden
lub auto
, a następnie przewijanie w nim poziomo i / lub pionowo.
To podejście jest świetne, ale ma jedną główną wadę: ponieważ wysokość dokumentu jest dokładnie taka sama jak w oknie przeglądarki, przeglądarka mobilna nie ukryje paska adresu / menu nawigacji .
Istnieje wiele hacków i właściwości rzutni, które pozwalają nam uzyskać więcej nieruchomości na ekranie, ale żadne z nich nie jest tak skuteczne jak minimal-ui
(wprowadzone w iOS 7.1).
Wczoraj pojawiły się wiadomości, że iOS 8 beta4 został usunięty minimal-ui
z Mobile Safari (patrz sekcja Webkit w Informacjach o wersji iOS 8 ), co nas zastanawiło:
Pytanie 1 Czy nadal można ukryć pasek adresu w Mobile Safari?
O ile wiemy, iOS 7 nie reaguje już na window.scrollTo
włamanie, co sugeruje, że musimy żyć z mniejszą powierzchnią ekranu, chyba że zastosujemy pionowy układ lub użycie mobile-web-app-capable
.
Q2 Czy nadal można uzyskać podobny miękki ekran pełnoekranowy?
Przez miękki pełny ekran naprawdę mam na myśli bez używania mobile-web-app-capable
metatagu.
Nasza aplikacja internetowa została zbudowana tak, aby była dostępna, każda strona może być dodana do zakładek lub udostępniona za pomocą natywnego menu przeglądarki. Dodając mobile-web-app-capable
, uniemożliwiamy użytkownikom wywoływanie takiego menu (gdy jest ono zapisywane na ekranie głównym), co dezorientuje użytkowników.
minimal-ui
niegdyś znajdował się na środku ziemi, domyślnie ukrywając menu, ale utrzymując je dostępnym za dotknięciem - chociaż Apple mógł je usunąć z powodu innych problemów z dostępnością (takich jak użytkownicy nie wiedzą, gdzie dotknąć, aby aktywować menu).
Pytanie 3 Czy warto pracować na pełnym ekranie?
Wygląda na to, że pełnoekranowy interfejs API nie pojawi się w najbliższym czasie na iOS, ale nawet jeśli tak jest, nie widzę, jak menu będzie dostępne (to samo dotyczy Chrome na Androida).
W takim przypadku być może powinniśmy po prostu opuścić mobilne safari i uwzględnić wysokość ekranu (dla iPhone'a 5+, to 460 = 568 - 108, gdzie 108 zawiera pasek systemu operacyjnego, pasek adresu i menu nawigacji; dla iPhone 4 lub starszy, to 372).
Bardzo chciałbym usłyszeć kilka alternatyw (oprócz tworzenia aplikacji natywnej).
Odpowiedzi:
Właściwość rzutni minimal-ui nie jest już obsługiwana w systemie iOS 8. Jednak sama minim-ui nie zniknęła. Użytkownik może wprowadzić minimalny interfejs użytkownika gestem „przeciągnij w dół”.
Istnieje kilka warunków wstępnych i przeszkód w zarządzaniu stanem widoku, np. Aby minimalny interfejs użytkownika działał, musi istnieć wystarczająca ilość treści, aby umożliwić użytkownikowi przewijanie; aby minim-ui mógł zostać zachowany, przewijanie okna musi być przesunięte przy ładowaniu strony i po zmianie orientacji. Jednak nie ma sposobu na obliczenie wymiarów minim-ui przy użyciu
screen
zmiennej, a zatem nie ma sposobu na określenie , kiedy użytkownik jest w minim-ui z góry.Te obserwacje są wynikiem badań w ramach rozwoju Brim - view managera dla iOS 8 . Implementacja końcowa działa w następujący sposób:
Wynik końcowy wygląda następująco:
Ze względu na dokumentację i jeśli wolisz napisać własną implementację, warto zauważyć, że nie można użyć Krzyku do wykrycia, czy urządzenie znajduje się w minimalnym interfejsie użytkownika bezpośrednio po zdarzeniu zmiany orientacji , ponieważ
window
wymiary nie odzwierciedlają nowej orientacji, dopóki animacja rotacji zakończyła się. Musisz dołączyć słuchacza do zmiany orientacji zdarzenia .W ramach tego projektu opracowano krzyk i zmianę orientacji .
źródło
Ponieważ nie ma programowego sposobu naśladowania
minimal-ui
, opracowaliśmy inne obejście, wykorzystującecalc()
i znaną wysokość paska adresu iOS na naszą korzyść:Następująca strona demonstracyjna ( dostępna również w Gist, tam więcej szczegółów technicznych ) poprosi użytkownika o przewinięcie, co następnie uruchomi miękki pełny ekran (ukryj pasek adresu / menu), w którym nagłówek i treść wypełnią nową rzutnię.
źródło
Po prostu pożegnaj się z minimal-ui (na razie)
To prawda,
minimal-ui
może być zarówno użyteczne, jak i szkodliwe, i przypuszczam, że kompromis ma teraz inną równowagę na korzyść nowszych, większych iPhone'ów.Zajmowałem się tym problemem podczas pracy z moją strukturą js dla aplikacji HTML5. Po wielu próbach rozwiązań, z których każde ma swoje wady, poddałem się rozważeniu utraty miejsca na iPhone'ach wcześniejszych niż 6. Biorąc pod uwagę sytuację, uważam, że jedynym solidnym i przewidywalnym zachowaniem jest z góry określone.
Krótko mówiąc, udało mi się zapobiec jakiejkolwiek formie minimalnego interfejsu użytkownika , więc przynajmniej moja wysokość ekranu jest zawsze taka sama i zawsze wiesz, ile faktycznie masz miejsca na aplikację.
Z czasem wystarczająca ilość użytkowników będzie miała więcej miejsca.
EDYTOWAĆ
Jak to robię
Jest to trochę uproszczone, do celów demonstracyjnych, ale powinno działać dla Ciebie. Zakładając, że masz główny pojemnik
Następnie:
następnie za pomocą js ustawiam
#main
wysokość na dostępną wysokość okna. Pomaga to również w radzeniu sobie z innymi błędami przewijania występującymi zarówno w systemie iOS, jak i Android. Oznacza to również, że musisz poradzić sobie z tym, jak go zaktualizować, pamiętaj, że;Po przekroczeniu granic zwoju blokuję nadmierne przewijanie. Ten jest trochę głębszy w moim kodzie, ale myślę, że możesz równie dobrze przestrzegać zasady tej odpowiedzi dla podstawowej funkcjonalności. Myślę, że może trochę trzepotać, ale wykona zadanie.
Zobacz demo (na iPhonie)
Na marginesie: ta aplikacja również jest godna uwagi, ponieważ korzysta z wewnętrznego routingu do mieszania adresów, ale dodałem również monit dla użytkowników iOS, aby dodać do domu. Uważam, że w ten sposób pomaga lojalność i powracających gości (a więc utracona przestrzeń powraca).
źródło
Najłatwiejszym sposobem, aby to naprawić, było ustawienie wysokości elementów body i HTML na 100,1% dla każdego żądania, w którym agentem użytkownika był iPhone. Działa to tylko w trybie poziomym, ale to wszystko, czego potrzebowałem.
Sprawdź to na https://www.360jungle.com/virtual-tour/25
źródło
Głównym problemem tutaj wydaje się, że safari na iOS8 nie ukryje paska adresu podczas przewijania w dół, jeśli zawartość jest równa lub mniejsza niż rzutnia.
Jak już się dowiedziałeś, dodanie dopełnienia na dole omija ten problem:
Powyższy css powinien być warunkowo zastosowany, na przykład z dodawaniem
gt-ios8
klasy przez sniffing UA<html>
.źródło
scrollIntoViewIfNeeded
, jest to niestandardowe pochodzeniescrollIntoView
( developer.mozilla.org/en-US/docs/Web/API/Element.scrollIntoView ). Jak sama nazwa wskazuje, metoda przewija element do widoku.true
parametr mówi, aby wyrównać widok z górą elementu. W efekcie powinno to uniemożliwić przewijanie. Implementacja jest jednak wadliwa.Chcę skomentować / częściowo odpowiedzieć / podzielić się swoimi przemyśleniami. Używam techniki overflow-y: scroll do dużego mojego nadchodzącego projektu. Korzystanie z niego ma dwie GŁÓWNE zalety.
a) Możesz użyć szuflady z przyciskami akcji u dołu ekranu; jeśli dokument przewinie się, a dolny pasek zniknie, stuknięcie przycisku znajdującego się na dole ekranu spowoduje najpierw wyświetlenie dolnego paska, a następnie kliknięcie. Również sposób, w jaki to działa, powoduje problemy z modami, które mają przyciski na samym dole.
b) Gdy używasz przepełnionego elementu, jedyne rzeczy, które są odmalowywane w przypadku poważnych zmian css, to te na widocznym ekranie. To dało mi ogromny wzrost wydajności podczas używania javascript do zmiany css wielu elementów w locie. Na przykład, jeśli masz listę 20 elementów, które wymagają odmalowania, a tylko dwa z nich znajdują się na ekranie w przepełnionym elemencie, tylko te zostaną przemalowane, a pozostałe zostaną przemalowane podczas przewijania. Bez tego wszystkie 20 elementów jest przemalowywanych.
.. oczywiście zależy to od projektu i jeśli potrzebujesz którejkolwiek z wymienionych przeze mnie funkcji. Google używa przepełnionych elementów dla Gmaila, aby korzystać z funkcji opisanych w punkcie a). Imo, warto poświęcić chwilę, nawet biorąc pod uwagę niewielką wysokość starszych telefonów (372px, jak powiedziałeś).
źródło
Jest to możliwe, używając czegoś takiego jak poniższy przykład, który przygotowałem przy pomocy pracy z ( https://gist.github.com/bitinn/1700068a276fb29740a7 ), która nie całkiem działała na iOS 11:
Oto zmodyfikowany kod, który działa na iOS 11.03, proszę o komentarz, jeśli zadziałał.
Kluczem jest zwiększenie rozmiaru BODY, aby przeglądarka mogła przewijać, np .: wysokość: calc (100% + 40px);
Pełna próbka poniżej i link do wyświetlenia w przeglądarce (przetestuj!)
Pełny przykładowy link tutaj: https://repos.codehot.tech/misc/ios-webapp-example2.html
źródło
Możliwe jest uruchomienie aplikacji internetowej na pełnym ekranie zarówno na iOS, jak i Androidzie, nazywa się to PWA i po ciężkiej pracy było to jedyne rozwiązanie tego problemu.
PWA otwierają wiele interesujących opcji rozwoju, których nie można przegapić. Zrobiłem już parę, sprawdź ten Publiczny i prywatny podręcznik przetargowy dla projektantów (hiszpański). A oto angielskie wyjaśnienie ze strony CosmicJS
źródło
Nie zrobiłem projektowania stron internetowych na iOS, ale z tego, co pamiętam, widziałem podczas sesji WWDC i dokumentacji, pasek wyszukiwania w Mobile Safari i paski nawigacyjne w systemie operacyjnym będą teraz automatycznie zmieniać rozmiar i zmniejszać się, aby wyświetlać więcej treści.
Możesz to przetestować w Safari na iPhonie i zauważyć, że po przewinięciu w dół, aby zobaczyć więcej treści na stronie, pasek nawigacji / wyszukiwania jest automatycznie ukryty.
Być może pozostawienie paska adresu / paska nawigacyjnego w niezmienionym stanie i nie tworzenie pełnego ekranu jest tym, co najlepsze. Nie widzę, żeby Apple robił to w najbliższym czasie. I co najwyżej nie kontrolują automatycznie, kiedy pasek adresu pokazuje / ukrywa się.
Oczywiście tracisz nieruchomości ekranowe, szczególnie na iPhonie 4 lub 4S, ale wydaje się, że nie ma alternatywy od wersji Beta 4.
źródło
I haven't done web design for iOS
- jeśli zajmujesz się projektowaniem stron internetowych, robisz to dla każdej platformy. Ponieważ sieć jest na każdej platformie.