2014-12-22 11 views
14

Próbuję zaimplementować UINavigationBar, która zmienia przezroczystość podczas przewijania UITableView. Na początku, pasek nawigacyjny powinien mieć przezroczyste tło, więc zawartość pod nim powinien być widoczny (nie będzie wyświetlany obraz, na przykład używam kolorem):UINavigationBar, który zmienia przezroczystość podczas przewijania

Example 1

gdy użytkownik przewija Zobacz Tabela przejrzystość należy wymienić kolorem:

Example 2

widok Tabela zawiera nagłówka sekcji, które powinny działać jak przy użyciu nie półprzezroczysty pasek nawigacji. Widoki nagłówka powinien „trzymać” na pasku nawigacji po ich „dotknąć” go od dołu:

Example 3

nie mam szczęścia próbuje wdrożyć ten przepływ w aplikacji na iOS.

Dla stanu początkowego, jestem ustawienie UINavigationBartranslucent właściwość YES, a zarówno backgroundColor i barTintColor na jasny kolor, który daje mi to, co chcę.

Następnie, gdy użytkownik przewija widok tabeli, aktualizuję backgroundColor i barTintColor na kolor z danym komponentem alfa, obliczony na podstawie aktualnego przesunięcia przewijania. Korzystam z protokołu scrollViewDidScroll: z UIScrollViewDelegate, aby to zrobić. Jednak zmienia tylko tło paska nawigacji, pozostawiając przezroczyste tło paska stanu, co nie jest tym, czego chcę.

Nie mogę znaleźć innego sposobu uczynienia przezroczystego UINavigationBar bez ustawienia właściwości translucent na YES. Niestety, zmienia to sposób działania nagłówków sekcji podczas przewijania. Ponieważ pasek nawigacyjny jest półprzezroczysty, widoki nagłówka sekcji ukrywają się pod nim, gdy powinny "przykleić" się do paska, jak na trzecim zrzucie powyżej.

Byłbym wdzięczny za wszelką pomoc i wskazówki, jak uzyskać pasek nawigacji, który działa jak opisany lub podobny w Objective-C lub Swift.

+9

Hey sprawdzić [LTNavigationbar] (https://github.com/ltebean/LTNavigationbar), które mogą być pomocne. –

+0

Dzięki @ Princ !! Fantastyczne znalezisko !! – SleepsOnNewspapers

+0

Szukałem tego znaleźć @PareshNavadiya Wielkie dzięki. – Gugulethu

Odpowiedz

2

Zakładając, że masz odniesienie do widoku nad Tableview i że nie chcą współdziałać nic w nim:

var overlayView:UIView! 
var offsetDenominator:CGFloat! 
let TARGER_COLOR = UIColor.blackColor() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    if let navCtrl = self.navigationController { 
     self.offsetDenominator = headerView.frame.size.height - navCtrl.navigationBar.frame.height 

     let targetCIColor = CIColor(CGColor: self.TARGER_COLOR.CGColor) 
     let overlayColor = UIColor(red: targetCIColor.red, green: targetCIColor.green, blue: targetCIColor.blue, alpha: 0.0) 

     self.overlayView = UIView(frame: self.headerView.frame) 
     self.overlayView.backgroundColor = overlayColor 

     self.view.addSubview(self.overlayView) 
    } 

... 

override func scrollViewDidScroll(scrollView: UIScrollView) { 
    if let navCtrl = self.navigationController, let breakpoint = offsetDenominator { 
     let alpha = scrollView.contentOffset.y/breakpoint 

     if alpha >= 1.0 { 
      navCtrl.navigationBar.backgroundColor = self.TARGER_COLOR 
     } else { 
      let targetCIColor = CIColor(CGColor: self.TARGER_COLOR.CGColor) 
      let overlayColor = UIColor(red: targetCIColor.red, green: targetCIColor.green, blue: targetCIColor.blue, alpha: alpha) 

      self.overlayView.backgroundColor = overlayColor 
      navCtrl.navigationBar.backgroundColor = UIColor.clearColor() 
     } 
    } 
} 
0

Swift3

var navAlpha = // Your appropriate calculation 
self.navigationController!.navigationBar.backgroundColor = UIColor.red.withAlphaComponent(navAlpha) 
Powiązane problemy