我試圖實現這種檢測滾動量並決定顯示導航欄或不顯示的表視圖。由於滾動量導致iOS隱藏導航欄
@interface HomeViewController() {
NSInteger scrollAmount;
bool navbarHidden = NO;
}
@implementation HomeViewController
@synthesize lastContentOffset = _lastContentOffset;
bool navbarHidden = NO;
- (void)awakeFromNib
{
[super awakeFromNib];
scrollAmount = 0;
distance = 50;
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGPoint offset = scrollView.contentOffset;
CGRect bounds = scrollView.bounds;
UIEdgeInsets inset = scrollView.contentInset;
if (offset.y > self.lastContentOffset.y)
{
scrollAmount++;
}
else
{
scrollAmount--;
}
bool awayFromTop = offset.y > distance + inset.top;
if (awayFromTop && !navbarHidden) {
[[self navigationController] setNavigationBarHidden:YES animated:YES];
navbarHidden = YES;
} else if (!awayFromTop || (scrollAmount < -100)) {
[[self navigationController] setNavigationBarHidden:NO animated:YES];
navbarHidden = NO;
}
self.lastContentOffset = offset;
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
scrollAmount = 0;
}
基本上,scrollViewDidScroll
計數滾動量,並且如果用戶向上滾動,則通過減去1
遞減scrollAmount
如果offset
足夠接近屏幕的頂端(!awayFromTop
)OR滾動量小於-100,預計導航欄被隱藏。
當我爲scrollAmount
程序運行一個NSLog
正確時,它隱藏了nav。當用戶離開頂部時顯示,或顯示頂部和scrollAmount
正確打印時顯示。
但是,無論何時scrollAmount
達到-沒有執行,並以某種方式scrollViewDidScroll
被稱爲無限我的意思是程序進入無限循環。 scrollAmount
印像-100,-101,-102 ... - 1005 ...
然後我下面的代碼使用:
if ([scrollView.panGestureRecognizer translationInView:self.view].y < heightOfScreen/-4.0f && !navbarHidden) {
[self.navigationController setNavigationBarHidden:YES animated:YES];
navbarHidden = YES;
} else if ([scrollView.panGestureRecognizer translationInView:self.view].y > heightOfScreen/4.0f && navbarHidden) {
[self.navigationController setNavigationBarHidden:NO animated:YES];
navbarHidden = NO;
}
顯然[scrollView.panGestureRecognizer translationInView:self.view].y
給某事。類似於scrollAmount
,但它工作完美,現在我想知道爲什麼我的實現失敗。任何想法讚賞。
其實我在問題('scrollView.panGestureRecognizer')中包含了一個替代和工作解決方案。不過,我需要弄清楚這種奇怪的行爲。答案將會是正確的故障排除,但感謝您的建議,也許有些人可以利用它。 –