Przewodniki po układzie strefy bezpiecznej w plikach xib-iOS 10
Zacząłem dostosowywać moją aplikację do iPhone'a X i znalazłem problem w Interface Builder.
Zgodnie z oficjalnymi filmami Apple wytyczne dotyczące układu bezpiecznych stref powinny być wstecznie kompatybilne. Uważam, że działa to świetnie w scenorysach.
Ale w moich plikach XIB przewodniki dotyczące układu bezpiecznej strefy nie są przestrzegane w systemie iOS 10.
Działają dobrze w nowszej wersji systemu operacyjnego, ale urządzenia iOS 10 wydają się po prostu przyjmować bezpieczną odległość strefy jako zero (ignorując rozmiar paska stanu).
Czy brakuje mi jakiejś wymaganej konfiguracji? Czy to błąd Xcode, a jeśli tak, czy są jakieś znane obejścia?
Oto zrzut ekranu przedstawiający problem w projekcie testowym (lewy iOS 10, prawy iOS 11):
https://i.stack.imgur.com/zcOJx.png
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
9 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
tutaj
https://coderoad.ru/46184197/
.
Możesz obejść te problemy z dodatkowymi ograniczeniami, takimi jak priorytet 1000> = 20.0 do superview.top i priorytet 750 == safearea.top. Jeśli zawsze wyświetlasz pasek stanu, powinno to naprawić wszystko.
Lepszym podejściem może być posiadanie oddzielnych scenorysów/xibs dla systemów wcześniejszych niż iOS 11 i iOS-11 i nowszych, zwłaszcza jeśli napotkasz więcej problemów. Powodem, dla którego jest to preferowane, jest to, że przed iOS 11 powinieneś umieścić ograniczenia na górnych/dolnych prowadnicach układu, ale w przypadku iOS 11 powinieneś umieścić je w bezpiecznych obszarach. Nie ma żadnych znaczników. Przewodniki po układach dla wersji wcześniejszych niż iOS 11 są stylistycznie lepsze niż tylko przesunięte o co najmniej 20 pikseli, nawet jeśli wyniki są takie same IFF, zawsze wyświetla się pasek stanu.
Jeśli podejmiesz takie podejście, musisz ustawić każdy plik na właściwy cel wdrożenia, w którym będzie używany (iOS 11 lub starszy), aby Xcode nie dawał ostrzeżeń i umożliwiał korzystanie z przewodników układu lub bezpiecznych obszarów, w zależności od tego. W swoim kodzie sprawdź, czy w czasie wykonywania jest iOS 11, a następnie pobierz odpowiedni scenorys/xibs.
Wadą tego podejścia jest konserwacja (będziesz mieć dwa zestawy kontrolerów widoku do utrzymania i synchronizacji), ale gdy Twoja aplikacja obsługuje tylko iOS 11+ lub Apple naprawi generowanie ograniczeń przewodnika układu zgodności wstecznej, powinieneś być w stanie się pozbyć wersji starszych niż iOS 11. ...
Swoją drogą, jak pokażesz kontroler, z którym to widzisz? Czy to tylko główny kontroler widoku, czy przedstawiłeś go, czy ...? Problem, który zauważyłem, jest związany z przekazywaniem kontrolerów widoku, więc możesz napotkać inny przypadek.
Anonimowy użytkownik
Potwierdzenie od:
Moim rozwiązaniem jest utworzenie 2 ograniczeń w kreatorze interfejsów i usunięcie jednego z nich w zależności od używanej wersji ios:
Dodaj je jako dane wyjściowe, takie jak odpowiednio i . Następnie:
Anonimowy użytkownik
Potwierdzenie od:
Z dokumentacji: „W systemie iOS 10 i wcześniejszych użyj tej właściwości, aby określić, które krawędzie kontrolera widoku znajdują się poniżej pasków nawigacyjnych lub innych widoków systemowych”.
W związku z tym ustawienie ich na pustą tablicę zapewnia, że kontroler widoku nie jest
rozszerza się pod paskami nawigacyjnymi.
Dokument dostępny
tutaj
https://developer.apple.com/do ... ayout
Anonimowy użytkownik
Potwierdzenie od:
[/*]
[*]
Wewnątrz ViewController na
[/*]
[/list]
Edytować:
Oto ulepszona wersja, której użyłem w naszej bazie kodu. Po prostu skopiuj/wklej poniższy kod i połącz każdy widok i ograniczenia z ich IBOutletCollection.
Liczba każdego IBOutletCollection musi być równa, na przykład dla każdego widoku
musi istnieć odpowiednie ograniczenie
Anonimowy użytkownik
Potwierdzenie od:
Zamiast tego utworzyłem dane wyjściowe do omawianego UIView i z kodu podłączyłem je w ten sposób w viewDidLayoutSubviews.
Powoduje to powiązanie małego „alertu” z górną częścią ekranu, ale zapewnia, że widok treści w alercie jest zawsze poniżej górnego bezpiecznego obszaru (iOS11ish)/topLayoutGuide (iOS10ish)
Proste i jednorazowe rozwiązanie. Jeśli coś się zepsuje, wrócę.
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Oraz
Po prostu ustaw podklasę ograniczenia IB i możesz wprowadzić określone zmiany w & < iOS11. Mam nadzieję, że to komuś pomoże.