Недавно я перешел на использование UITabBarController
в своем приложении, и меня не удивило, что я не могу заставить hidesBarsOnSwipe
работать с ним. Я обычно просто говорю (в контроллере представления) hidesBarsOnSwipe = true
, но теперь это не работает. Было бы здорово, если бы кто-нибудь помог мне сделать эту работу.
Благодарность!
4 ответа
Я решил проблему. Я встроил UITabBarController
внутрь UINavigationController
, который я поставил в качестве корневого контроллера представления для окна. После того, как я сделал рут только контроллером панели вкладок, он работал как шарм.
Благодарность!
Вы можете добавить действие в hideOnSwipe, как показано ниже.
[self.navigationController.barHideOnSwipeGestureRecognizer addTarget:self action:@selector(swipeGesture:)];
Добавьте любой код, который хотите, в метод swipeGesture. Скрыть / показать панель вкладок.
Быстро3
self.navigationController?.barHideOnSwipeGestureRecognizer.addTarget(self, action: "swipeGestuere")
Объявить скрытую переменную, которая помогает вернуть панель вкладок
func swipeGestuere() {
if (hidden == true){
self.bottomTabBar.isHidden = true
hidden = false
}
else{
self.bottomTabBar.isHidden = false
hidden = true
}
}
Я решил это, изменив размер UITabBarController
достаточно, чтобы убрать панель вкладок с экрана:
- (void)setTabBarHidden:(BOOL)hidden
{
CGRect frame = self.originalViewFrame;
if (hidden)
{
frame.size.height += self.tabBar.size.height;
}
self.view.frame = frame;
}
Затем вы можете добавить KVO в свой режим прокрутки:
[scrollView addObserver:self
forKeyPath:@"contentOffset"
options:NSKeyValueObservingOptionOld
context:nil];
И скрыть / показать панель вкладок при прокрутке:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
CGPoint oldOffset = [(NSValue *)change[NSKeyValueChangeOldKey] CGPointValue];
if (!_hidesBarsOnScroll || _scrollView.contentOffset.y == oldOffset.y)
return;
// Show on scroll up
if (_barsHidden &&
scrollView.contentOffset.y < oldOffset.y &&
scrollView.contentOffset.y + scrollView.bounds.size.height < scrollView.contentSize.height) // Skip on bottom
{
[self.navigationController setNavigationBarHidden:NO
animated:YES]; // Also navigation bar!
[self.tabBarController setTabBarHidden:NO
animated:YES];
_barsHidden = NO;
}
// Hide on scroll down
if (!_barsHidden &&
scrollView.contentOffset.y > 0 && // Skip on top
scrollView.contentOffset.y > oldOffset.y)
{
[self.navigationController setNavigationBarHidden:YES
animated:YES];
[self.tabBarController setTabBarHidden:YES
animated:YES];
_barsHidden = YES;
}
}
Вы можете ознакомиться с этой реализацией .
setTabBarHidden:
при прокрутке. Для этого также добавлен пример кода, но вы можете сделать это по-другому, если хотите.
Похожие вопросы
Связанные вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.
hidesBarsOnSwipe = YES;
? Если это не поможет, предоставьте нам код для исследования.self.navigationController!.hidesBarsOnSwipe = true
, hidesBarsOnSwipe включен только в NavigationController, позже он может быть добавлен в UITabBarController, у меня это сработало в случае, когда UITabBarController является исходным контроллером, и оба элемента встроены в NavigationController, добавив этот код в метод viewDidLoad обоих элементов.