CollectionViewControllerとcollectionViewCellにはTableViewが含まれています。CollectionViewは水平レイアウトです。tableViewをスクロールするときにナビゲーションバーを非表示にします。それについて何かアイデアはありますか。
テーブルビューをスクロールしたいときはいつでも、スクロール可能なナビゲーションバーにいくつかのgitライブラリを使用できます。上から下へスクロールします。
このライブラリをこのように使用するには、このコードのようにここで使用できます
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if let navigationController = self.navigationController as? ScrollingNavigationController {
navigationController.followScrollView(tableView, delay: 50.0)
}
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[(ScrollingNavigationController *)self.navigationController followScrollView:self.tableView delay:50.0f];
}
スクロールとナビゲーションに関連するこれらすべてを管理するのに役立ついくつかのデリゲートメソッドがあります。
AMScrollingNavbar参照するにはここをクリック
これはあなたの役に立つと思います。
これを試して:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.panGestureRecognizer.translation(in: scrollView).y < 0 {
navigationController?.setNavigationBarHidden(true, animated: true)
} else {
navigationController?.setNavigationBarHidden(false, animated: true)
}
}
@property(assign、nonatomic)CGFloat currentOffsetを作成します。
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
scrollView = self.collectionProductView;
_currentOffset = self.collectionProductView.contentOffset.y;
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat scrollPos = self.collectionProductView.contentOffset.y ;
if(scrollPos >= _currentOffset ){
//Fully hide your toolbar
[UIView animateWithDuration:2.25 animations:^{
[self.navigationController setNavigationBarHidden:YES animated:YES];
}];
} else {
//Slide it up incrementally, etc.
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
}
[self.navigationController setNavigationBarHidden:NO animated:YES];を再度貼り付けることを忘れないでください。
at-ビューが表示されなくなるか、コントローラーが別のビューに移動するたびに、次のビューコントローラーのナビゲーションバーが表示されなくなることがあります。
Naoの答えに加えて:
Scrollviewの高さが十分に小さくない場合、Navigationbarが非表示になったときにスクロールできないscrollviewが発生します。また、scrollviewがスクロール不能になった場合、この関数は呼び出されず、ナビゲーションバーは永久に消えます。
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let height = view.safeAreaLayoutGuide.layoutFrame.size.height
let scrolled = scrollView.panGestureRecognizer.translation(in: scrollView).y
if !(scrollView.visibleSize.height - height >= 90) {
if scrolled < 0 {
navigationController?.setNavigationBarHidden(true, animated: true)
} else {
navigationController?.setNavigationBarHidden(false, animated: true)
}
}
}
func scrollViewDidScroll(_ scrollView: UIScrollView)
{
// var navigationBarFrame = self.navigationController!.navigationBar.frame
let currentOffset = scrollView.contentOffset
if (currentOffset.y > (self.lastContentOffset?.y)!) {
if currentOffset.y > 0 {
initial = initial - fabs(CGFloat(currentOffset.y - self.lastContentOffset!.y))
}
else if scrollView.contentSize.height < scrollView.frame.size.height {
initial = initial + fabs(CGFloat(currentOffset.y - self.lastContentOffset!.y))
}
}
else {
if currentOffset.y < scrollView.contentSize.height - scrollView.frame.size.height {
initial = initial + fabs(CGFloat(currentOffset.y - self.lastContentOffset!.y))
}
else if scrollView.contentSize.height < scrollView.frame.size.height && initial < maxPlus {
initial = initial - fabs(CGFloat(currentOffset.y - self.lastContentOffset!.y))
}
}
if (initial <= maxMinus){
initial = maxMinus
self.tableviewTopConstrin.constant = 0
UIView.animate(withDuration: 0.4, animations: {
self.view.layoutIfNeeded()
})
}else if(initial >= maxPlus){
initial = maxPlus
self.tableviewTopConstrin.constant = 70
UIView.animate(withDuration: 0.4, animations: {
self.view.layoutIfNeeded()
})
}else{
}
self.lastContentOffset = currentOffset;
}