8

Jak widać na poniższym obrazku, Twitter używa innego koloru paska nawigacyjnego dla każdego kontrolera widoku, który jest pchany.Pasek nawigacyjny z różnymi kolorami w każdym kontrolerem widoku, takim jak Twitter (nie w trybie setbartintcolor).

Próbowałem już prawie wszystkiego (setbackgroundimage, backgroundcolor, bartintcolor, etc), ale nic nie działa. To, co myślę, to to, że Twitter używa niestandardowego przejścia, aby ZAPROJEKTOWAĆ pchnięcie, ponieważ, wydaje mi się, że każdy kontroler widoku ma swój własny pasek nawigacyjny z własnym kolorem.

enter image description hereenter image description here

+0

Patrząc na animację na zrzucie ekranu, powiedziałbym, że na ekranie głównym używany jest niestandardowy "UINavigationBar" (ukryty jest jeden z "UINavigationController"), a po naciśnięciu nowego ekranu domyślny pasek nawigacyjny zostanie wyświetlony za pomocą 'UINavigationController .setNavigationBarUkryte (_: animowane:) '. – fluidsonic

Odpowiedz

2

Twitter nie zmienia pasku nawigacyjnym kolor. Gdy patrzysz na profil użytkownika, jest to rozmyta wersja zdjęcia na okładkę użytkownika.

Jak widać w przejściu, cały widok profilu użytkownika zastępuje poprzedni widok. Pasek nawigacji nie zmienia się, jest zastępowany. Mogą nawet nie używać paska UINavigationBar (a przynajmniej nie tego z kontrolera nawigacyjnego).

"Pasek" to widok niestandardowy, który pokazuje zdjęcie okładki użytkownika, a przyciski wstecz/wyszukiwania/tweeta pojawiają się na swoich zwykłych pozycjach. Zdjęcie na okładkę użytkownika zmniejsza się, zaciera i przywiązuje do górnej części ekranu po przewinięciu w dół - w tym momencie wygląda jak normalny pasek nawigacji. Nazwa użytkownika i licznik tweetów również przewijają w tym momencie do środka paska nawigacyjnego.

To dość intrygujące, a cała struktura widoku dla profilu użytkownika prawdopodobnie wykorzystuje kilka sztuczek. Ale nie jest to proste zadanie naśladować ich widok profilu, a oni robią o wiele więcej niż tylko zmianę odcienia paska nawigacyjnego. Jeśli chcesz to zrobić, odpowiedź Cofnij działa dobrze. Jednak może być również konieczne zresetowanie koloru tinty w metodzie viewWillAppear (ze starego i nowego widoku).

+0

Tak, wiem, że ten twitter używa niewyraźnego zdjęcia na okładkę. Chciałem tylko zrozumieć, w jaki sposób stworzyli ten pasek nawigacyjny. Lub cokolwiek to jest. Pomysł, że nie używają nawet paska nawigacyjnego, jest dobry, ale myślę, że najprostszym sposobem na osiągnięcie tego jest użycie niestandardowego przejścia pomiędzy różnymi kontrolerami nawigacyjnymi. tnx w każdym razie! – Monte

+0

Jeśli spojrzysz na zrzut ekranu, zobaczysz, że kontroler widoku z tyłu ma ciemny poziom przezroczystości, który w CUSTOM push na iOS nie istnieje – Monte

+0

Nie sądzę, że ma to coś wspólnego z przejściami. To zwykłe przejście, które ukrywa pasek nawigacji po naciśnięciu widoku profilu użytkownika. "Pasek nawigacyjny" jest po prostu niestandardowym widokiem, który pokazuje zdjęcie na okładce w jego normalnych i niewyraźnych postaciach. – ttarik

4

Jeśli chcesz obsłużyć numer navigationBar z różnymi barTintColor s, Szkoła kodów miała samouczek na ten temat. (iOS App: Creating a Custom Nav Bar) Może również zostać rozszerzony na różne tła za pomocą metody setBackgroundImage:forBarMetrics:.

Istnieją następujące cztery etapy:

  1. Uchwyt ten w viewWillAppear widoku kontrolera źródłowego ukryć navigationBar że navigationController dostarczone i utworzyć nowy navigationBar do superView.

    - (void)styleNavBar 
    { 
        // 1. hide the existing nav bar 
        [self.navigationController setNavigationBarHidden:YES animated:NO]; 
    
        // 2. create a new nav bar and style it 
        UINavigationBar *newNavBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 64.0)]; 
        [newNavBar setTintColor:[UIColor whiteColor]]; 
    
        // 3. add a new navigation item w/title to the new nav bar 
        UINavigationItem *newItem = [[UINavigationItem alloc] init]; 
        newItem.title = @"Source"; 
        [newNavBar setItems:@[newItem]]; 
    
        // 4. add the nav bar to the main view 
        [self.view addSubview:newNavBar]; 
    } 
    
  2. zrobić tę samą sztuczkę w viewWillAppear kontrolera widoku cel, i stworzyć backBarButtonItem jako nowe navigationBar „s leftBarButtonItem.

    - (void)styleNavBar 
    { 
        [self.navigationController setNavigationBarHidden:YES animated:NO]; 
        UINavigationBar *newNavBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 64.0)]; 
        [newNavBar setTintColor:[UIColor blueColor]]; 
        UINavigationItem *newItem = [[UINavigationItem alloc] init]; 
        newItem.title = @"Destination"; 
    
        // BackButtonBlack is an image we created and added to the app’s asset catalog 
        UIImage *backButtonImage = [UIImage imageNamed:@"BackButtonBlack"]; 
    
        // any buttons in a navigation bar are UIBarButtonItems, not just regular UIButtons. backTapped: is the method we’ll call when this button is tapped 
        UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithImage:backButtonImage 
                          style:UIBarButtonItemStylePlain 
                         target:self 
                         action:@selector(backTapped:)]; 
    
        // the bar button item is actually set on the navigation item, not the navigation bar itself. 
        newItem.leftBarButtonItem = backBarButtonItem; 
    
        [newNavBar setItems:@[newItem]]; 
        [self.view addSubview:newNavBar]; 
    } 
    
  3. Wypełnij metodę backTapped: tak, że użytkownik jest w stanie dopasować się do popover z pola widzenia docelowego sterownika.

    - (void)backTapped:(id)sender 
    { 
        [self.navigationController popViewControllerAnimated:YES]; 
    } 
    
  4. Biorąc pod uwagę sytuację trzepnąć-to-pop, ustawienie delegata gest Rozpoznawania do self w viewWillAppear kontrolera widoku docelowego.(Autor: Rozwiązaniem tego problemu jest nieco hack.)

    - (void)viewWillAppear:(BOOL)animated 
    { 
        [super viewWillAppear:animated]; 
        [self styleNavBar]; 
    
        __weak id weakSelf = self; 
        self.navigationController.interactivePopGestureRecognizer.delegate = weakSelf; 
    } 
    
+0

to świetna sztuczka. jednak odrzuca domyślny efekt animacji Apple – WhiteTherewasproblem

2

To dla swift3:

  1. można ustawić oryginalne tło NavBar z pustego obrazu:

    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) 
    self.navigationController?.navigationBar.shadowImage = UIImage() 
    
  2. Przy tym wszystkim innym VC w hierarchii widoku zastosuje przezroczysty pasek nawigacji.

  3. W drugim polu VC, jeśli chcesz ustawić niestandardowy obraz lub niestandardowy kolor, po prostu umieść widok tła w pozycji paska nawigacyjnego, to w widoku załadowano metodę danego kontrolera widoku.

    let viewNavBar = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 64)) 
    viewNavBar.backgroundColor = UIColor.white 
    view.addSubview(viewNavBar) 
    

Whit ten można ustawić dowolny obraz tła lub wewnątrz viewNavBar i nie zadzieraj z ogólnej konfiguracji paska nawigacji.