Czy ktoś ma problem z symulatorem iPhone'a X wokół komponentu UITabBar?
Mój wydaje się renderować ikony i tytuł jeden na drugim, nie jestem pewien, czy czegoś mi brakuje, uruchomiłem go również w symulatorze iPhone'a 8 i jednym rzeczywistym urządzeniu, na którym wygląda dobrze, tak jak pokazano na plansza fabularna.
iPhone X:
iPhone 8
Odpowiedzi:
Udało mi się obejść ten problem, po prostu wywołując invalidateIntrinsicContentSize w UITabBar w viewDidLayoutSubviews.
Uwaga: dół paska kart będzie musiał znajdować się na dole widoku głównego, a nie w bezpiecznym obszarze, a pasek kart nie powinien mieć ograniczenia wysokości.
źródło
[self.view layoutIfNeeded]
.landscapeImage
właściwości przycisku paska kart. Zalecane rozmiary znajdują się w [Apple HIG's] ( developer.apple.com/design/human-interface-guidelines/ios/… ) w sekcji Niestandardowy rozmiar ikonyOdpowiedź udzielona przez VoidLess rozwiązuje problemy TabBar tylko częściowo. Naprawia problemy z układem na pasku kart, ale jeśli używasz kontrolera widoku, który ukrywa pasek kart, pasek kart jest nieprawidłowo renderowany podczas animacji (aby go odtworzyć najlepiej 2 mają 2 segmenty - jeden modalny i jedno naciśnięcie. Jeśli zmienisz segmenty, możesz zobacz, że pasek kart jest renderowany nie na miejscu). Poniższy kod rozwiązuje oba problemy. Dobra robota, jabłko.
Kod celu C:
źródło
Istnieje sztuczka, dzięki której możemy rozwiązać problem.
To naprawdę działa na mnie.
Możesz też skorzystać z tego łącza, aby uzyskać więcej informacji.
źródło
nadpisanie
UITabBar
sizeThatFits(_)
dla safeAreaźródło
Dodałem to do
viewWillAppear
mojego zwyczajuUITabBarController
, ponieważ żadna z udzielonych odpowiedzi nie działała dla mnie:źródło
Miałem ten sam problem.
Jeśli ustawię jakąkolwiek niezerową stałą na dolnym ograniczeniu UITabBar do bezpiecznego obszaru:
Zaczyna działać zgodnie z oczekiwaniami ...
To jedyna zmiana, jaką wprowadziłem i nie mam pojęcia, dlaczego to działa, ale jeśli ktoś to zrobi, chciałbym wiedzieć.
źródło
Odsuwanie paska kart o 1 punkt od dołu działało dla mnie.
Oczywiście w ten sposób otrzymasz lukę, którą będziesz musiał w jakiś sposób wypełnić, ale tekst / ikony są teraz prawidłowo ustawione.
źródło
Aha! To naprawdę magia!
W końcu doszedłem do tego po godzinach przeklinania Apple.
UIKit faktycznie obsługuje to za Ciebie i wygląda na to, że przesunięte elementy paska kart są spowodowane nieprawidłową konfiguracją (i prawdopodobnie rzeczywistym błędem UIKit). Nie ma potrzeby tworzenia podklas ani widoku w tle.
UITabBar „po prostu zadziała”, jeśli jest ograniczony do dolnej części widoku nadzoru, a NIE do dolnej strefy bezpiecznej .
Działa nawet w kreatorze interfejsów.
Prawidłowa konfiguracja
Czasami to nadal nie działa
Naprawdę głupie jest to, że możesz od razu zobaczyć błąd w IB, nawet jeśli dodasz dokładne ograniczenia, które IB dodaje w powyższych krokach!
źródło
Naprawiono przez użycie podklasy UITabBar do zastosowania safeAreaInsets:
źródło
Rozwiązany dla mnie dzwoniąc
[tabController.view setNeedsLayout];
po odrzuceniu modalu w bloku uzupełniania.źródło
Wysokość paska UITabBar rośnie, aby znajdować się powyżej przycisku / linii ekranu głównego, ale rysuje widok podrzędny w jego pierwotnej lokalizacji i nakłada widok podrzędny na widok podrzędny UITabBarItem.
Aby obejść ten problem, możesz wykryć iPhone'a X, a następnie zmniejszyć wysokość widoku o 32 piksele, aby upewnić się, że pasek kart jest wyświetlany w bezpiecznym obszarze nad linią główną.
Na przykład, jeśli tworzysz swój TabBar programowo zamień
Z tym:
UWAGA: Może to być błąd, ponieważ rozmiary widoku i układ paska kart są ustawiane przez system operacyjny. Powinien prawdopodobnie wyświetlić się zgodnie ze zrzutem ekranu Apple w Wytycznych dotyczących interfejsu ludzkiego iPhone'a X tutaj: https://developer.apple.com/ios/human-interface-guidelines/overview/iphone-x/
źródło
W moim przypadku ustawiłem niestandardową wysokość UITabBar w moim UITabBarController, na przykład:
Usunięcie tego kodu umożliwiło poprawne wyświetlanie paska TabBar na telefonie iPhone X.
źródło
Najprostszym rozwiązaniem, które znalazłem, było po prostu dodanie odstępu 0,2 pt między dolną krawędzią paska kart a dolną częścią pliku safeAreaLayoutGuide.bottomAnchor.
źródło
Miałem ten sam problem, gdy próbowałem ustawić ramkę UITabBar w moim niestandardowym TabBarController.
Kiedy dostosowałem go do nowego rozmiaru, problem zniknął
źródło
kPhoneXTabBarHeight
?Spotkałem to dzisiaj z aa UITabBar ręcznie dodanym do kontrolera widoku w scenorysie, podczas wyrównywania do dołu bezpiecznego obszaru ze stałą równą 0 dostałbym problem, ale zmiana go na 1 rozwiązałaby problem. Posiadanie paska UITabBar o 1 piksel więcej niż normalnie było do zaakceptowania dla mojej aplikacji.
źródło
Podrapałem się w głowę z powodu tego problemu. Wydaje się, że jest to związane ze sposobem inicjowania i dodawania tabBar w celu wyświetlenia hierarchii. Wypróbowałem również powyższe rozwiązania, takie jak wywołanie
invalidateIntrinsicContentSize
, ustawienie ramki, a takżebottomInsets
wewnątrz podklasy UITabBar. Wydaje się jednak, że działają one tymczasowo i przerywają jakiś inny scenariusz lub cofają pasek kart, powodując niejednoznaczny problem z układem. Podczas debugowania problemu próbowałem przypisać ograniczenia wysokości do UITabBar i centerYAnchor, jednak żadne z nich nie rozwiązało problemu. W debugerze zdałem sobie sprawę, że wysokość tabBar była poprawna przed i po odtworzeniu problemu, co doprowadziło mnie do wniosku, że problem występuje w podwidokach. Użyłem poniższego kodu, aby pomyślnie rozwiązać ten problem bez cofania żadnego innego scenariusza.Założenia: robię to tylko dla iPhone'a X, ponieważ w tej chwili nie wydaje się, aby odtwarzał się na żadnym innym urządzeniu. Opiera się na założeniu, że Apple nie zmienia nazwy klasy UITabBarButton w przyszłych wydaniach iOS. Robimy to na UITabBarButton tylko wtedy, gdy oznacza to, że jeśli Apple doda więcej wewnętrznych podglądów do UITabBar, może być konieczne zmodyfikowanie kodu, aby dostosować się do tego.
Daj mi znać, czy to zadziała, będzie otwarty na sugestie i ulepszenia!
Stworzenie szybkiego odpowiednika powinno być proste.
źródło
viewDidAppear(animated:)
mojegoUITabBarController
i działało dobrze. Dzięki!Z tego samouczka:
https://github.com/eggswift/ESTabBarController
i po zainicjowaniu paska kart zapisując tę linię w klasie appdelegate
Rozwiązuje mój problem z paskiem kart.
Mam nadzieję, że to rozwiązuje twój problem
Dzięki
źródło
Wybierz pasek kart i ustaw pole wyboru „Zapisz względne marginesy obszaru” w edytorze Inspector w następujący sposób:
źródło
Miałem podobny problem, początkowo był renderowany poprawnie, ale po ustawieniu
badgeValue
na jednym z tabBarItem zepsuł układ. To, co zadziałało dla mnie bez podklas,UITabBar
było to, na mojej już utworzonejUITabBarController
podklasie.Użyłem tabBar superview, aby upewnić się, że ograniczenia / kotwice są w tej samej hierarchii widoku i uniknąć awarii.
Opierając się na moim zrozumieniu, ponieważ wydaje się to być błędem UIKit, musimy tylko przepisać / ponownie ustawić ograniczenia paska kart, aby silnik automatycznego układu mógł ponownie poprawnie rozmieścić pasek kart.
źródło
Jeśli masz jakiekolwiek ograniczenie wysokości paska kart, spróbuj je usunąć.
Zmierzyłem się z tym samym problemem i usunięcie tego rozwiązało problem.
źródło
Utworzyłem nowy UITabBarController w mojej planszy i wypchnąłem wszystkie kontrolery widoku do tego nowego UITabBarConttoller. Tak więc wszystko działa dobrze w symulatorze iPhone'a X.
źródło
W przypadku iPhone'a możesz to zrobić, Subclass UITabBarController.
Idź do Storyboard i zezwól na korzystanie z Safe Area Layout Guide i zmień klasę UITabbarController na MyTabBarController
PS To rozwiązanie nie jest testowane w przypadku aplikacji uniwersalnej i iPada.
źródło
spróbuj zmienić ekran powitalny z rozmiarem @ 3x (3726 × 6624)
źródło
Dla mnie usuń
[self.tabBar setBackgroundImage:]
pracę, może to błąd UIKitźródło
Dla mnie to rozwiązało wszystkie problemy:
źródło
Używałem
UITabBarController
w serii ujęć i na początku było to w porządku pracy dla mnie, ale po aktualizacji do nowszej wersji Xcode zaczęło dając mnie kwestie związane z wysokością umieszczenie zakładek.Dla mnie poprawką było usunięcie istniejącego
UITabBarController
z storyboardu i ponowne utworzenie, przeciągając go z biblioteki obiektów kreatora interfejsu .źródło
Dla tych, którzy piszą w całości
UITabBarController
programowo, możesz użyćUITabBarItem.appearance().titlePositionAdjustment
do dostosowania pozycji tytułuWięc w tym przypadku, jeśli chcesz dodać lukę między ikoną i tytułem, użyj jej w
viewDidLoad
:wykrywanie, czy urządzenie ma ekran Notch:
źródło
Miałem ten sam problem, który został rozwiązany przez ustawienie elementów tabBar po ułożeniu paska kart.
W moim przypadku problem wystąpił, gdy:
źródło
Myślę, że to błąd UIKit z iPhoneX. bo to działa:
źródło
Wydaje mi się, że możesz układać pasek kart z dolnym przewodnikiem po bezpiecznym układzie. Prawdopodobnie nie jest to to, czego chcesz, ponieważ pasek kart wydaje się wykonywać własne obliczenia, aby bezpiecznie pozycjonować elementy paska kart na górze linii głównej w telefonie iPhone X. Skonfiguruj dolne ograniczenie względem dołu nadzoru . Powinieneś zobaczyć, że działa poprawnie na iPhonie X, a także na innych iPhone'ach.
źródło