iPhoneでスクロールダウンすると両方のバーを非表示にしたいと思います。上にスクロールすると、それらが再び表示されるはずです..どうすればこれを処理できますか?
4 に答える
- (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
.
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
は、受け入れられた回答と同じトリックが機能するはずです。
iOS8から入手できるこれをチェックするかもしれません。これはあなたが探しているものの逆だと思います...しかし、それは標準的なものであり、これがSafariの仕組みであるため、チェックする価値があります。
迅速
var hidesBarsOnSwipe: Bool
Objective-C
@property(nonatomic, readwrite, assign) BOOL hidesBarsOnSwipe ディスカッション
このプロパティが YES に設定されている場合、上方向にスワイプすると、ナビゲーション バーとツールバーが非表示になります。下にスワイプすると、両方のバーが再び表示されます。ツールバーに項目がない場合は、スワイプしても表示されたままになります。このプロパティのデフォルト値は NO です。
これが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)
}
}