版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yun_bao_2144899870/article/details/86710936
现在好多应用的首页都要求状态栏和tabbar支持滑动隐藏,直播平台源码又怎能甘心落后于人呢?对于此类需求,我们可以使用UICollectionView来进行功能实现,UICollectionView 的功能非常强大,利用它可以做出非常优美流畅的首页动画。
接下来就是制作滑动隐藏状态栏和tabbar的具体步骤。
1、创建UICollectionView
UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc]init];
flow.scrollDirection = UICollectionViewScrollDirectionVertical;
flow.itemSize = CGSizeMake(_window_width/2-4.5, (_window_width/2-4.5) * 1.5);
flow.minimumLineSpacing = 3;
flow.minimumInteritemSpacing = 3;
flow.sectionInset = UIEdgeInsetsMake(3, 3,3, 3);
flow.headerReferenceSize = CGSizeMake(_window_width, 95);
//创建UICollectionView并设置frame,注意要是0,0,屏幕宽,屏幕高
_collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0,0, _window_width, _window_height) collectionViewLayout:flow];
_collectionView.delegate = self;
_collectionView.dataSource = self;
[self.view addSubview:_collectionView];
//注册XIBcell
[self.collectionView registerNib:[UINib nibWithNibName:@"HotCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"HotCollectionViewCELL"];
//注册UICollectionview的头视图
[self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"hotHeaderV"];
if (@available(iOS 11.0, *)) {
_collectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
// Fallback on earlier versions
self.automaticallyAdjustsScrollViewInsets = NO;
}
_collectionView.backgroundColor = [UIColor whiteColor];
//设置UIcollectionView的偏移量 : 导航栏高度+IPhoneX的状态栏高度
_collectionView.contentInset = UIEdgeInsetsMake(64+statusbarHeight, 0, 0, 0);
具体的UICollectionView代理方法我就不写了,网上有很多相关教程
2、在UIScrollView的滑动代理方法中计算滑动的位置,来判断显示隐藏
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
//记录滑动的位置
oldOffset = scrollView.contentOffset.y;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (scrollView.contentOffset.y > oldOffset) {
//向上滑隐藏
if (scrollView.contentOffset.y > 0) {
//这个pageview是我用的分页控制器,可以换成自己的navi
_pageView.hidden = YES;
[self hideTabBar];
}
}else{
//向下滑显示
_pageView.hidden = NO;
[self showTabBar];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
NSLog(@"%f",oldOffset);
}
#pragma mark ================ 隐藏和显示tabbar ===============
- (void)hideTabBar {
if (self.tabBarController.tabBar.hidden == YES) {
return;
}
self.tabBarController.tabBar.hidden = YES;
ZYTabBar *tabbar = (ZYTabBar *)self.tabBarController.tabBar;
tabbar.plusBtn.hidden = YES;
}
- (void)showTabBar
{
if (self.tabBarController.tabBar.hidden == NO)
{
return;
}
self.tabBarController.tabBar.hidden = NO;
ZYTabBar *tabbar = (ZYTabBar *)self.tabBarController.tabBar;
tabbar.plusBtn.hidden = NO;
}
完成上述步骤后即可在直播平台源码中实现首页导航栏向上滑动隐藏和tabbar以及向下滑展示导航栏和tabbar了,以后还会有更多与直播源码相关的干货文章会在我的CSDN中持续放出,敬请期待。
声明:文章声明原创,转载请注明出处及作者。