Xcode / iOS: Как скрыть навигацию и панель инструментов при прокрутке вниз?
Я хотел бы скрыть обе полосы при прокрутке вниз на моем iPhone. Когда я прокручиваю вверх, они должны появиться снова.. Как я могу с этим справиться?
4 ответов
принятый ответ не работает для меня, так как scrollViewWillBeginScroll:
не является методом делегата.
вместо этого я делаю
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldHide" object:self];
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView
willDecelerate:(BOOL)decelerate
{
if(!decelerate)
[[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldUnhide"
object:self];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldUnhide"
object:self];
}
в любом месте приложения объекты могут слушать это уведомление, как
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserverForName:@"BarsShouldHide"
object:nil
queue:nil
usingBlock:^(NSNotification *note) {
//hide tab bar with animation;
}];
[[NSNotificationCenter defaultCenter] addObserverForName:@"BarsShouldUnhide"
object:nil
queue:nil
usingBlock:^(NSNotification *note) {
//Unhide tab bar with animation;
}];
}
этот код скроет полосы для любого прокрутки. если вы хотите иметь только вниз, то же самое locationOffset
трюк, как в принятом ответе, должен работать.
- (void)scrollViewWillBeginScroll :(UIScrollView *)scrollView {
if (scrollView.contentOffset.y < lastOffset.y) {
[toolBar setHidden:YES];
[[[self navigationController] navigationBar] setHidden:YES];
} else{
// unhide
}
}
- (void)scrollViewDidScroll :(UIScrollView *)scrollView {
/// blah blah
lastOffset = scrollView.contentOffset;
}
Примечание : lastOffset
это CGPoint
и он идет в свой заголовочный файл: @Interface
.
вот мое решение в Swift; он работает красиво
func scrollViewDidScroll(scrollView: UIScrollView) {
let navController: UINavigationController = self.navigationController!
if self.collectionView.panGestureRecognizer.translationInView(self.view).y <= 0.0 {
defaultCenter.postNotificationName("stuffShouldHide", object: self)
} else {
defaultCenter.postNotificationName("stuffShouldUnhide", object: self)
}
}
вы можете проверить это, доступное из iOS8, я думаю, что это обратная сторона того, что вы ищете...но стоит проверить, как это что-то стандартное, и именно так работает Safari.
Свифт
var hidesBarsOnSwipe: Bool
С
@свойство (неатомное, readwrite, assign) BOOL hidesBarsOnSwipe Обсуждение
Если для этого свойства задано значение да, прокрутка вверх скрывает навигацию бар и панель инструментов. Нисходящий свайп снова показывает оба бара. Если панель инструментов не имеет элементов, она остается видимой даже после сильный удар. По умолчанию это свойство имеет значение NO.