iOS scrollable UINavigationBar follows UIScrollView
Inspired by the navigation bar functionality seen in Chrome, Facebook and Instagram iOS apps which it can shrink or expand based on the scrolling of a UIScrollView object such as UITableView, I have coded a custom navigation bar, called GTScrollNavigationBar at https://github.com/luugiathuy/GTScrollNavigationBar
Screenshots:
The GTScrollNavigationBar class inherits UINavigationBar and has a scrollView property which the GTScrollNavigationBar object will follow the scrolling. When setting the scrollView property, GTScrollNavigationBar will add a UIPanGestureRecognizer to the scrollView and have a function called handlePan:
to handle the gesture.
In setScrollView:
function:
if (self.panGesture.view) {
[self.panGesture.view removeGestureRecognizer:self.panGesture];
}
[scrollView addGestureRecognizer:self.panGesture];
Then in the handlePan:
function, the GTScrollNavigationBar is scrolled up or down by adjusting its frame.origin.y
based on the change in contentOffset
property of the scrollview. The reason why I choose this instead of the translation of the panGesture is that we want the scrolling of the navigation bar is aligned with UIScrollView’s one. Besides it can check whether contentOffset.y < 0
so that the the navigation bar won’t be scrolled.
The title, back button and other views in navigation bar is also faded in/out when the navigation bar is scrolled. It is done by adjusting their alpha
property based on the position of the navigation bar.
That’s it :) You can read the README file at https://github.com/luugiathuy/GTScrollNavigationBar to set up the GTScrollNavigationBar in your project or view the example in the project.