仿照去哪儿,隐藏导航栏(其实是设置为透明背景):向下滑动到时,当顶部图片看不见时,显示导航栏,源代码下载,效果如下:
主要思想:就是监听UITableView的滑动事件,当UITableView滑动一定距离时,设置NavigationBar的背景色,查看UITableView.h没看到有监听滑动事件的Delegate,但是UITableView的父类是UIScroolView,所以通过实现UIScrollViewDelegate代理的以下方法进行滑动监听:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
核心代码:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (![self isCurrentViewControllerVisible:self]) {
return;
}
float a = self.mainTableView.contentOffset.y;
if (a<68) {
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bg"] forBarMetrics:UIBarMetricsDefault];
}else{
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bg4"] forBarMetrics:UIBarMetricsDefault];
}
}
其中isCurrentViewControllerVisible是判断当前ViewController是否位是用户可见(也就是在栈顶),只有用户可见时,才根据当前滑动设置NavigationBar的背景。实现代码点这里
说明:当滑动不超过68像素点时,设置NavigationBar为透明,这里设置背景图片为bg.png,bg是像素为1*1的透明图片,通过Photoshop新建一个1*1像素,背景为透明的图片保存为bg.png即可。
当滑动超过69像素点时,设置NavigationBar不透明,即设置背景为不透明图片即可,方法同上。
源代码:http://download.csdn.net/detail/dolacmeng/8824471