导航栏透明下拉半透明
2016-12-26 本文已影响0人
安处幽篁兮
需求:
- 导航栏透明
- 下拉变色
实现:
第一步:创建基类
BaseScrollViewController 继承自UIViewController
@interface BaseScrollViewController () <UIScrollViewDelegate,UINavigationControllerDelegate>
@property (nonatomic, strong) UIScrollView *scrollView;
@end
loadView:This is where subclasses should create their custom view hierarchy if they aren't using a nib. Should never be called directly.这是当他们没有正在使用nib视图页面,子类将会创建自己的自定义视图层。绝不能直接调用。
从nib/storyBoard载入视图 。除非你没有使用xib文件创建视图。
- (void)loadView{
// 根视图更为滚动视图
self.scrollView = [[UIScrollView alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.view = self.scrollView;
self.scrollView.delegate = self;
}
viewWillAppear: Called when the view is about to made visible. Default does nothing视图即将可见时调用。默认情况下不执行任何操作。由于产品要求下一页的NavBar的和上页的并不同,所以在此方法里写,这样切换界面都可以调用到。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.automaticallyAdjustsScrollViewInsets = NO;
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
// 设置透明
[[[self.navigationController.navigationBar subviews]objectAtIndex:0] setAlpha:0];
self.view.backgroundColor = [AXUtils colorWithString:@"ffffff"];
self.navigationController.delegate = self;
[self scrollViewDidScroll:self.scrollView];
// [self.navigationController.navigationBar setShadowImage:[UIImage new]];
}
viewWillDisappear :Called when the view is dismissed, covered or otherwise hidden. Default does nothing视图被驳回时调用,覆盖或以其他方式隐藏。默认情况下不执行任何操作。
若是自定义的NavBar,在此reset销毁
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// [self.navigationController.navigationBar reset];
}
下拉变色的实现方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat offsetY = scrollView.contentOffset.y;
// 滑动超过设定值即半透明
if (offsetY > ScaleHeight(50)) {
CGFloat alpha = MIN(0.8, 1 - ((ScaleHeight(50) + 64 - offsetY) / 64));
[self.navigationController.navigationBar setBackgroundImage:[AXUtils imageWithString:@"000000"] forBarMetrics:UIBarMetricsDefault];
[[[self.navigationController.navigationBar subviews]objectAtIndex:0] setAlpha:alpha];
} else {
[[[self.navigationController.navigationBar subviews]objectAtIndex:0] setAlpha:0];
}
}
总结:UI切图就好了,嘿嘿嘿~