Как поменять transparency of navigation bar при скроле

navigationbar
swift3

#1

Ребят помогите пожалуйста кто сталкивался с такой задачей.

У меня есть прозрачный navigation bar и когда скролл доходит до определенной отметки,(в моей случае это image) мне нужно убрать прозрачность. Пробовал функцию scrollViewWillEndDragging, он меняет прозрачность при scroll но делает это крайне криво и без анимации. В заранее благодарю.


#2

Как я понимаю, проблема лишь в том, что нету анимации? Тогда

UIView.animate(duration: 0.2) {
     tabBar.alpha = 1
}

А если не только - опишите более детально и было бы хорошо увидеть код.


#5
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    if(velocity.y>0) {
        //Code will work without the animation block.I am using animation block incase if you want to set any delay to it.
        UIView.animate(withDuration: 2.5, delay: 0, options: UIViewAnimationOptions(), animations: {
            navigationController?.navigationBar.isTranslucent = false
            print("Hide")
        }, completion: nil)
    } else {
        UIView.animate(withDuration: 2.5, delay: 0, options: UIViewAnimationOptions(), animations: {
            
            print("Unhide")
        }, completion: nil)
    }
}

как то так пытался


#6

У вас и не будет анимации, т.к. функция animate анимирует изменение UI напраямую.
При изменении isTransculent меняется альфа, т.е. изменение поисходит не напрямую.
Наверное не очень понятно написал, извините не знаю как это нормально сформулировать.

А еще 2.5с - это многовато, пока идет анимация вы не сможете взаимодействовать с UI.

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    let alpha: Int = velocity.y > 0 ? 1 : 0

    UIView.animate(withDuration: 0.5, delay: 0, options: UIViewAnimationOptions(), animations: {
            navigationController?.navigationBar.alpha = alpha
    }, completion: nil)
}

#7

попробовал ваш код, спасибо большое все плавно переходит, но это не совсем что мне нужно. У меня изначально установлен navigation bar как isTranslucent = true, и navigation items на нем видны, и при скролле мне нужно менять translucent на false) как то так) извините если не правильно объяснил, у меня опыта не так много в swift)


#8

Тогда меняйте цвет навигейшн бара на цвет вашего бекграунда и обратно.