Mam aplikację, która czasami potrzebuje paska nawigacji, aby wtopić się w treść.
Czy ktoś wie, jak się pozbyć lub zmienić kolor tego irytującego małego paska?
Na poniższym obrazku mam - mówię o tej linii o wysokości 1px poniżej „Root View Controller”
ios
objective-c
swift
ipad
uinavigationbar
Szymon Kuczur
źródło
źródło
Odpowiedzi:
W systemie iOS 13:
Użyj
.shadowColor
nieruchomościNa przykład:
Dla iOS 12 i niższych:
Aby to zrobić, należy ustawić niestandardowy obraz cienia. Ale aby pokazać obraz cienia, musisz również ustawić niestandardowy obraz tła, cytat z dokumentacji Apple:
Więc:
Powyżej jest jedynym „oficjalnym” sposobem na ukrycie tego. Niestety usuwa przezroczystość paska.
Nie chcę obrazu tła, tylko kolor
Masz te opcje:
Jednolity kolor, bez półprzezroczystości:
Utwórz mały obraz tła wypełniony kolorem i użyj go.
Użyj metody „hacky” opisanej poniżej. Dzięki temu pasek będzie przezroczysty.
Jak zachować przejrzystość paska?
Aby zachować przejrzystość, potrzebujesz innego podejścia, wygląda to na hack, ale działa dobrze. Cień, który próbujemy usunąć, to linia włosów
UIImageView
gdzieś podUINavigationBar
. Możemy go znaleźć i ukryć / pokazać w razie potrzeby.Poniższe instrukcje zakładają, że potrzebujesz linii włosów ukrytej tylko w jednym kontrolerze w Twojej
UINavigationController
hierarchii.Deklaracja zmiennej instancji:
Dodaj metodę, która znajdzie ten cień (linia włosów)
UIImageView:
Dodaj / edytuj
viewWillAppear/viewWillDisappear
metody:Ta sama metoda powinna również działać w przypadku
UISearchBar
linii włosów i (prawie) wszystkiego, co musisz ukryć :)Ogromne podziękowania dla @Leo Natan za oryginalny pomysł!
źródło
UINavigationBar
właściwości:clipsToBounds = YES
clipsToBounds = YES
działa jak urok! Dzięki!viewWillAppear
się nazywa, nie możemy dostaćshadowImageView
Poniżej może pomóc po prostu!
Szybki:
Cel C:
źródło
Jeśli chcesz po prostu użyć jednolitego koloru paska nawigacyjnego i skonfigurowałeś go w swojej serii ujęć, użyj tego kodu w swojej
AppDelegate
klasie, aby usunąć granicę 1 piksela za pośrednictwem wyglądu proxy:źródło
Spróbuj tego:
Poniższe zdjęcie ma wyjaśnienie (pasek nawigacji iOS7):
I sprawdź to SO: iOS7 - Zmień kolor ramki UINavigationBar
źródło
Chciałem dodać szybką wersję odpowiedzi Serhii. Utworzyłem
UIBarExtension.swift
z:źródło
Szybki sposób na zrobienie tego:
źródło
Proste rozwiązanie w mgnieniu oka
źródło
Po przestudiowaniu odpowiedzi od Serhila stworzyłem pasek UINavigationBar + Dodatek, który może z łatwością ukryć linię włosów.
źródło
W Swift 3.0
Edytuj swój
AppDelegate.swift
, dodając następujący kod do funkcji aplikacji:źródło
Począwszy od systemu iOS 13 istnieje systemowy interfejs API do ustawiania lub usuwania cienia
https://developer.apple.com/documentation/uikit/uibarappearance/3198009-shadowimage
źródło
UINavigationBarAppearance
nagłówkach !! Nigdy tego nie znajdę. Dzięki, to rozwiązało moje problemy w 100%Może być również ukryty w Storyboard (działa na Xcode 10.1)
Dodając atrybut środowiska wykonawczego: hidesShadow - Boolean - True
źródło
Zaktualizowano rozwiązanie pxpgraphics dla Swift 2.0
źródło
UINavigationController().navigationBar/toolbar.hide/showBottomHairline()
a następnie nie? Próbuję tego, ale bezskutecznie. Czy nie rozumiem poprawnie?Swift 4 // do ukrywania linii cienia paska nawigacji
źródło
Korzystam z rozszerzenia UINavigationBar, które pozwala mi ukryć / pokazać ten cień za pomocą interfejsu API UIAppearance lub wybrać pasek nawigacji, który ma ukryć / pokazać ten cień za pomocą Storyboard (lub kodu źródłowego). Oto rozszerzenie:
Teraz, aby wyłączyć cień na wszystkich paskach nawigacyjnych, musisz użyć:
Lub możesz włączyć / wyłączyć to zachowanie za pomocą scenariuszy:
źródło
flatAssociatedObjectKey
unikatowej int (traktowanej jak wskaźnik), aby zidentyfikować powiązany obiekt. Tutaj jest zdefiniowany przez adres pamięci prywatnego var. Zaktualizowałem odpowiedź, aby dodać ten var. Zobacz nshipster.com/associated-objects aby uzyskać więcej informacji.translucent
na falseSwift 4 Testowane ROZWIĄZANIE W JEDNEJ LINII
W
Viewdidload()
Ustaw wartość domyślną użytkownika kontrolera nawigacji true dla klucza „hidesShadow”źródło
Swift to położył
w
źródło
Inna opcja, jeśli chcesz zachować przezroczystość i nie chcesz podklasować wszystkich
UINavigationController
aplikacji:źródło
źródło
Rozwiązanie w Swift 4.2:
Po prostu umieść tę funkcję w pierwszym programie Viewcontroller i wywołaj ją
viewdidload
źródło
W iOS8, jeśli ustawisz
UINavigationBar.barStyle
na.Black
można ustawić tło na pasku jako zwykły kolorze bez obramowania.W Swift:
źródło
Dwuliniowe rozwiązanie, które działa dla mnie. Spróbuj dodać to w metodzie ViewDidLoad:
źródło
Oto bardzo proste rozwiązanie:
źródło
Proste rozwiązanie - Swift 5
Utwórz rozszerzenie:
Dodaj to do
viewDidLoad()
:źródło
Dla użytkowników iOS 9 to zadziałało dla mnie. po prostu dodaj to:
źródło
Problem z ustawieniem obrazu tła polega na tym, że usuwa on rozmycie. Możesz go usunąć bez ustawiania obrazu tła. Zobacz moją odpowiedź tutaj .
źródło
Powinieneś dodać widok na dole UISearchBar
źródło
Wiem, że to stary wątek, ale znalazłem rozwiązanie, które działa naprawdę dobrze:
Podklasa UINavigationBar. W podklasie UINavigationBar przesłonięcie didAddSubview przy użyciu następującego kodu:
źródło
Właśnie utworzyłem rozszerzenie dla tego ... Przepraszam za formatowanie (to moja pierwsza odpowiedź).
Stosowanie:
Rozbudowa:
źródło
W AppDelegate globalnie zmieniło to format paska nawigacyjnego:
Nie udało mi się wdrożyć niczego innego na konkretnym VC, ale to pomoże 90% ludzi
źródło
źródło