我们就要如下图的效果哦,就是让NavigationBar随着滑动而出现与隐藏,就是那种若隐若现的感觉,感觉棒棒哒,哈哈
废话不多说咯,上代码咯
首先呢,我们要创建TableView还要给它指定一个HeaderView,然后再开始我们接下来的事情
UIView *backGroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(tableView.frame), 80)]; backGroundView.backgroundColor = [UIColor redColor]; tableView.tableHeaderView = backGroundView;
那这种效果实现的前提,肯定是在ScrollView的Delegate里面实现咯,那就完善这个方法吧
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { UIColor *color = [UIColor blueColor]; CGFloat offsetY = scrollView.contentOffset.y; if (offsetY > 0) { } else { } }
那么我们先来看看系统的NavigationBar是什么情况,如果细心一点的话,你会发现系统的NavigationBar上面覆盖着一层View,没错,就是它咯,但是我们从API里面取不到,只能够重新帮它写一个好啦,行,那就走一个Category好了
@interface UINavigationBar (BackgroundColor) @property (nonatomic, strong) UIView *overlayView; - (void)categorySetBackgroundColor:(UIColor *)color; @end
那么我们要为Category添加一个属性的呢,很可惜,Category是不允许有属性的,所以我们只好利用runTime来做这件事情咯,那就是动态绑定一个属性,让这个属性给Category,这里我们利用了runTime的绑定方法,而不是Category的属性哦
static const void *OverlayViewKey = &OverlayViewKey; - (UIView *)overlayView { return objc_getAssociatedObject(self, &OverlayViewKey); } - (void)setOverlayView:(UIView *)overlayView { objc_setAssociatedObject(self, OverlayViewKey, overlayView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); }
接下来呢,我们就要把这个View插进NavigationBar里面了哦,看代码
- (void)categorySetBackgroundColor:(UIColor *)color { if (!self.overlayView) { [self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; [self setShadowImage:[UIImage new]]; self.overlayView = [[UIView alloc] initWithFrame:CGRectMake(0, -20, [UIScreen mainScreen].bounds.size.width, 64)]; [self insertSubview:self.overlayView atIndex:0]; } [self.overlayView setBackgroundColor:color]; }
然后我们再回到ScrollView的Delegate里面,来重新写这里的逻辑
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { UIColor *color = [UIColor blueColor]; CGFloat offsetY = scrollView.contentOffset.y; if (offsetY > 0) { CGFloat alpha = 1 - ((108 - offsetY) / 108); [self.navigationController.navigationBar categorySetBackgroundColor:[color colorWithAlphaComponent:alpha]]; } else { [self.navigationController.navigationBar setBackgroundColor:[color colorWithAlphaComponent:0]]; } }
OK,就这样了哦,是不是效果很美呢
这是网上一个小伙伴写的哦,只不过他提供出来的代码比较粗糙,小弟做了下整理,希望可以帮到那些需要的人呢,好啦,这期就到这里了哦
有问题的话来群里找我哦,或者留言都OK的
本文出自 “东软iOS校友群的技术博客” 博客,请务必保留此出处http://neusoftios.blog.51cto.com/9977509/1635761
原文:http://neusoftios.blog.51cto.com/9977509/1635761