Jak uczynić UINavigationBar przejrzystym ? Chociaż chcę, aby elementy paska pozostały widoczne.
235
Jak uczynić UINavigationBar przejrzystym ? Chociaż chcę, aby elementy paska pozostały widoczne.
Jeśli ktoś zastanawia się, jak to osiągnąć w iOS 7+, oto rozwiązanie (kompatybilne także z iOS 6)
W celu C
[self.navigationBar setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;
W swift 3 (iOS 10)
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true
W szybkim 2
self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true
Ustawianie translucent
się YES
na pasku nawigacyjnym załatwia sprawę, ze względu na zachowanie omówione w UINavigationBar
dokumentacji. Podam tutaj odpowiedni fragment:
Jeśli ustawisz tę właściwość
YES
na pasku nawigacji z nieprzezroczystym niestandardowym obrazem tła, pasek nawigacji zastosuje do obrazu nieprzezroczystość systemową mniejszą niż 1,0.
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = nil; self.navigationController.navigationBar.translucent = NO;
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.translucent = true
W iOS5 możesz to zrobić, aby pasek nawigacji był przezroczysty:
źródło
[[UINavigationBar appearance] setShadowImage: [[UIImage alloc] init]];
Z IOS7:
źródło
Dla każdego, kto chce to zrobić w Swift 2.x:
lub Swift 3.x:
źródło
To wydaje się działać:
źródło
-drawRect:
właściwą podklasę, a nie kategorię, a następnie użyć tej podklasy jako paska nawigacji.Po wykonaniu tego, co wszyscy inni powiedzieli powyżej, tj .:
... mój pasek nawigacyjny był nadal biały . Więc dodałem ten wiersz:
... zrobione! To chyba załatwiło sprawę.
źródło
Jeśli budujesz z najnowszą wersją beta iOS 13.4 i XCode 11.4, zaakceptowana odpowiedź nie będzie działać. Znalazłem inny sposób, może to tylko błąd w oprogramowaniu beta, ale na wszelki wypadek zapisuję to tutaj
(szybki 5)
źródło
Wiem, że ten temat jest stary, ale jeśli ludzie chcą wiedzieć, jak to zrobić bez przeciążania metody drawRect.
Oto, czego potrzebujesz:
źródło
Poniższy kod rozwija się przy górnej odpowiedzi wybranej dla tego wątku, aby pozbyć się dolnej granicy i ustawić kolor tekstu:
Ostatnie dwa zakodowane wiersze tego kodu ustawiają przezroczystość. Pożyczyłem ten kod z tego wątku i działał idealnie!
Znalazłem kod „clipsToBounds”, który pozbył się dolnej linii granicznej z OR bez ustawionego przezroczystości (więc jeśli zdecydujesz się zamiast tego na stałe białe / czarne / itp. Tło, nadal nie będzie linii granicznej).
Linia „tintColor” (druga linia kodowana) ustawiła mój przycisk powrotu na jasnoszary
BarTintColor zachowałem jako kopię zapasową. Nie wiem, dlaczego przezroczystość nie miałaby działać, ale jeśli nie, chcę, żeby mój biały bg był taki, jak kiedyś
źródło
dla Swift 3.0:
źródło
Rozwiązanie C # / Xamarin
źródło
Wypróbuj następujący fragment kodu:
źródło
Innym sposobem, który działał dla mnie, jest podklasa UINavigationBar i pozostawienie metody drawRect pustej !!
źródło
W Swift 4.2
(w viewWillAppear), a następnie w viewWillDisappear, aby cofnąć, wstaw
źródło
Czy masz na myśli całkowicie przezroczysty, czy używasz półprzezroczystego czarnego stylu widocznego w aplikacji Zdjęcia? To ostatnie można osiągnąć, ustawiając jego
barStyle
właściwość naUIBarStyleBlackTranslucent
. Ten pierwszy ... nie jestem pewien. Jeśli chcesz, aby elementy na nim były nadal widoczne, być może będziesz musiał trochę przekopać się w hierarchii widoków paska i usunąć widok zawierający jego tło.źródło
Działa to dla Swift 2.0.
źródło
Sprawdź RRViewControllerExtension , który jest dedykowany do zarządzania wyglądem paska UINavigation.
z RRViewControllerExtension w swoim projekcie wystarczy zastąpić
w twoim widoku kontroler.
źródło
źródło