效果
想要實現上滑動scrollView時,導航欄隱藏,下滑時,導航欄顯示。
//scrollView代理方法中的實現
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
UIPanGestureRecognizer *pan = scrollView.panGestureRecognizer;
//獲得手勢在視圖上滑動的速度 >0 是向下滑動 <0是向上滑動。
CGFloat velocity = [pan velocityInView:scrollView].y;
if (velocity > 5) {//此處用0也可以,看自己覺得什么值效果好一些。
[self.navigationController setNavigationBarHidden:NO animated:YES];
}else if(velocity < -5){
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
}
圖中紅色視圖是控制器的view,綠色視圖是scrollView的內容視圖,scrollView的底色是藍色的。
這個控制器用的是Storyboard
創建的,約束scrollView的時候將scrollView的頂部
約束.png
圖中如果約束superView的話,可以
Constant
的值使其蓋住狀態欄,如果約束safe area的話,就相當于留出來了狀態欄的20高度。下邊用
Masonry
約束實現這個效果。
self.scrollView= [[UIScrollView alloc]init];
self.scrollView.backgroundColor = [UIColor blueColor];
[self.view addSubview:self.scrollView];
[self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
// make.top.equalTo(self.mas_topLayoutGuideBottom);//約束留出導航欄 11之前
make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop);//約束留出導航欄 11之后
make.left.right.bottom.equalTo(self.view);
}];
self.scrollView.delegate = self;
//內容視圖 將scrollView撐起來
UIView *contentView = [[UIView alloc]init];
contentView.backgroundColor = [UIColor greenColor];
[self.scrollView addSubview:contentView];
[contentView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.right.left.bottom.equalTo(self.scrollView);
make.width.mas_equalTo(self.scrollView.mas_width);
make.height.mas_equalTo(1000);
}];
運行代碼效果也是截圖的效果。注意make.top.equalTo(self.mas_topLayoutGuideBottom);
不要約束為父視圖的top。