2014-12-22 3 views
14

Я пытаюсь реализовать UINavigationBar, который меняет свою прозрачность при прокрутке UITableView. В начале, навигационная панель должна иметь прозрачный фон, так что содержание под ним должно быть видно (там будет изображение, отображаемое, для примера я использую одноцветный):UINavigationBar, который меняет прозрачность при прокрутке

Example 1

Когда пользователь прокручивает просмотр таблицы, прозрачность должен быть заменена сплошным цветом:

Example 2

Табличного будет содержать заголовки разделов, которые должны действовать, как при использовании не-полупрозрачный панели навигации. Виды заголовков должны «прилипнет» к панели навигации, как только они «потрогать» его от дна:

Example 3

Я не везёт с пытается реализовать этот поток в IOS приложение.

Для начального состояния, я устанавливаю UINavigationBartranslucent свойства YES, и как backgroundColor и barTintColor очистить цвет, который дает мне то, что я хочу.

Затем, когда пользователь прокручивает табличный вид, я обновляю backgroundColor и barTintColor до цвета с заданным альфа-компонентом, вычисленным на основе текущего смещения прокрутки. Я использую протокол scrollViewDidScroll: от UIScrollViewDelegate, чтобы сделать это. Тем не менее, он меняет только фон панели навигации, оставляя прозрачный фон состояния, что я не хочу.

Я не могу найти другой способ сделать UINavigationBar прозрачный без установки translucent property to YES. К сожалению, это влияет на то, как заголовки разделов действуют при прокрутке. Поскольку панель навигации является полупрозрачной, просмотры заголовков разделов скрываются ниже нее, когда они должны «прилипать» к панели, как на третьем скриншоте выше.

Я был бы признателен за любую помощь и подсказки о том, как достичь панели навигации, которая действует как описанная или аналогичная в Objective-C или Swift.

+9

Эй проверить [LTNavigationbar] (https://github.com/ltebean/LTNavigationbar), которые могут быть полезны. –

+0

Спасибо @Prince !! Удивительная находка! – SleepsOnNewspapers

+0

Я искал эту находку @PareshNavadiya Спасибо большое. – Gugulethu

ответ

2

Предполагая, что у вас есть ссылка на взгляд выше Tableview и что вы не хотите, чтобы взаимодействовать ничего в нем:

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) 
Смежные вопросы