Я хотел бы скрыть оба столбца на прокрутке вниз на моем iPhone. Когда я прокручиваю вверх, они должны появиться снова.. Как я могу справиться с этим?
Xcode/iOS: как скрыть навигацию и панель инструментов на прокрутке вниз?
Ответ 1
Принятый ответ не работает для меня, поскольку 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
, что и в принятом ответе, должен работать.
Ответ 2
- (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
.
Ответ 3
Здесь мое решение в 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)
}
}
Ответ 4
Вы можете проверить это, доступное с iOS8, я думаю, что это обратное тому, что вы ищете... но стоит проверить, поскольку это что-то стандартное, и так работает Safari.
Свифта
var hidesBarsOnSwipe: Bool
Objective-C
@property (nonatomic, readwrite, assign) BOOL hidesBarsOnSwipe Обсуждение
Если для этого свойства установлено значение YES, восходящий салфетка скрывает навигацию бар и панель инструментов. Прокрутка вниз показывает обе полосы снова. Если панель инструментов не имеет элементов, она остается видимой даже после салфетки. Значением по умолчанию этого свойства является NO.