2015-02-04 13 views
6

Próbuję dodać efekt rozmycia do paska nawigacji i paska stanu. Moim problemem jest to, że rozmycie idzie dobrze na pasek nawigacji, ale pasek stanu nie rozmywa się.iOS 8 - Zastosuj rozmycie na pasku nawigacji ORAZ pasek stanu

Moje pytanie brzmi: jak mogę rozszerzyć zakres, aby objąć pasek stanu?

używam następujące metody, aby stworzyć efekt rozmycia:

- (void) addBlurEffect { 

CGRect bounds = self.navigationController.navigationBar.bounds; 
UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]]; 
visualEffectView.frame = bounds; 
visualEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
[self.navigationController.navigationBar addSubview:visualEffectView]; 
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor]; 
[self.navigationController.navigationBar sendSubviewToBack:visualEffectView]; 

}

W moim plist, mam View kontrolera opartego na wygląd paska stanu YES

W viewDidLoad Nazywam metodę:

- (void)configureView { 

    // style controls 

    self.addAirportButton.tintColor = [UIColor whiteColor]; 

    // style background image 

    UIImageView *sidebarBackground = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"sidebarBackground"]]; 
    self.tableView.backgroundView = sidebarBackground; 

    // style navigation bar 

    self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent; 

    // this makes navigation bar transparent 

    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] 
                forBarMetrics:UIBarMetricsDefault]; 
    self.navigationController.navigationBar.shadowImage = [UIImage new]; 
    self.navigationController.navigationBar.translucent = YES; 

    // style toolbar 

    self.navigationController.toolbar.translucent = YES; 
    self.dismissAdsButton.tintColor = [UIColor whiteColor]; 

Nic więcej nie zostanie zrobione w viewDidLoad. Kiedy to buduję, oto jak wygląda widok - jest to tableViewController osadzony w kontrolce NavigationController i korzystam z doskonałego kontrolera SWRevealViewController.

Zobacz jak pasek stanu nie jest rozmyty:

The blur is only in the navigation bar part - the status bar is not blurred

Każda pomoc będzie bardzo mile widziana!

AKTUALIZACJA:

Zobacz odpowiedź poniżej. Oto zrzut ekranu z wdrożonego rozwiązania:

screenshot with solution applied

+0

Czy próbowałeś nazywając to wszystko z viewWillAppear zamiast viewDidLoad gdy widok ma się pojawić po raz pierwszy? –

+0

Próbowałem, bez zmian, niestety. –

Odpowiedz

5

Mam stara się osiągnąć podobny efekt, po poprawieniu z UINavigationBar API i nie może osiągnąć pożądany rezultat, znalazłem rozwiązania:

  1. utwórz UIView ten sam rozmiar, co Twój NavigationBar + StatusBar. Oznacza to, że miałby ramę (0, 0, w, 64), gdzie w jest szerokością ekranu. (Zrobiłem to za pomocą Storyboard i użyłem autolayout, aby ustawić ograniczenie szerokości na równe z jego podglądem)

  2. Zestaw UIView's backgroundColor, aby wyczyścić kolor.

  3. uczynić navigationBar całkowicie przezroczysty z następującego kodu: navBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) navBar.shadowImage = UIImage() navBar.translucent = true

  4. teraz zastosować efekt rozmycia tego poglądu, to stwarza iluzję, że efekt rozmycia był zarówno pasku nawigacyjnym, a na pasku stanu.

Zobacz this picture dla osiągniętego efektu (przepraszam nie mogę zakładać obraz jednak ze względu na ograniczenia reputacji).

Mam nadzieję, że to pomoże.

UPDATE 28.05.2015:

ten sposób osiągnąłem wspomnianą metodę w Storyboard:

  1. utworzyć pasek nawigacji tle widok na najwyższej hierarchii jako bezpośrednie dziecka widoku głównym . Zauważ, że wszystko inne zawinąłem je w jeden widok zawartości. Widok zawartości jest w kolorze czerwonym, a widok paska nawigacji w kolorze jest półprzezroczysty biały.

enter image description here

  1. Dodaj następujący 4 ograniczeń dotyczących Navigation bar biały widok jak takie: 0 na lewo, w prawo, a górna ograniczenie, a 64 dla ograniczenia wysokości.

+0

Bardzo ładne. Spróbuję tego. –

+0

Jak mogłeś dodać UIView w strukturze storyboardów? Czy możesz opublikować zrzut ekranu swojego scenorysu i widoku struktury? –

+0

Witam @ChrisHolloway, zaktualizowałem swoją odpowiedź za pomocą zrzutów ekranu. Nie wahaj się dać mi znać, jeśli potrzebujesz dalszych wyjaśnień. – saulgoodman

Powiązane problemy