J'ai collectionViewController et collectionViewCell incluent TableView.CollectionView est une disposition horizontale. Je veux masquer la barre de navigation lorsque vous faites défiler la tableView. Y a-t-il une idée à ce sujet?.
Depuis iOS 8, vous pouvez simplement utiliser
self.navigationController?.hidesBarsOnSwipe = true
Cela nécessite bien sûr que votre ViewController soit intégré dans un NavigationController. Tous les enfants VC du NavigationController hériteront de ce comportement, vous pouvez donc l'activer/le désactiver dans viewWillAppear
. Vous pouvez également définir les indicateurs respectifs sur le contrôleur de navigation dans le storyboard.
Vous pouvez utiliser certaines bibliothèques git pour la barre de navigation défilable chaque fois que vous souhaitez faire défiler la vue de votre tableau/Faire défiler de haut en bas/de bas en haut, cela ajustera automatiquement votre barre de navigation.
vous pouvez utiliser ici comme ce code pour utiliser cette bibliothèque comme celle-ci
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];
}
Il a quelques méthodes de délégué pour gérer tout cela lié au défilement et à la navigation.
AMScrollingNavbar cliquez ici pour voir
Je pense que cela vous est utile.
Essaye ça:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.panGestureRecognizer.translation(in: scrollView).y < 0 {
navigationController?.setNavigationBarHidden(true, animated: true)
} else {
navigationController?.setNavigationBarHidden(false, animated: true)
}
}
créer un @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];
}
}
N'oubliez pas de coller à nouveau [self.navigationController setNavigationBarHidden: NO animated: YES];
at - view disparaîtra ou chaque fois que le contrôleur se déplace vers un autre, car cela pourrait faire disparaître la barre de navigation du contrôleur de vue suivante.
En plus de la réponse de nao:
Si la hauteur de la vue de défilement n'est pas assez petite, cela provoquera une vue de défilement non défilable lorsque la barre de navigation est masquée. Et si scrollview ne peut plus défiler, cette fonction n'est pas appelée et la barre de navigation a disparu pour toujours
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;
}