我们就要如下图的效果哦,就是让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