您好我的视图控制器似乎有些问题。当用户向下滚动时,我的标题栏将慢慢淡出,一旦用户向上滚动标题栏将慢慢淡入。我的问题是当向下滚动时,标题栏有时会卡住并变得不稳定,如下图所示:< / p>
白色条卡在没有干净的显示和消失效果的情况下卡住。这是代码:
#warning new code for hide header bar
/**
* Catch scroll event for calculating Show and hide header view
* Note that _menu (tableView) is the scrollable control
*/
[_contentTableView addObserver:self
forKeyPath:@"contentOffset"
options:NSKeyValueObservingOptionOld
context:nil];
_hidesBarsOnScroll = YES;
}
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
UITableView *tempTableView = _contentTableView;
CGPoint oldOffset = [(NSValue *)change[NSKeyValueChangeOldKey] CGPointValue];
if (!_hidesBarsOnScroll || tempTableView.contentOffset.y == oldOffset.y)
return;
// Show on scroll up
if (_barsHidden &&
tempTableView.contentOffset.y < oldOffset.y &&
tempTableView.contentOffset.y + tempTableView.bounds.size.height < tempTableView.contentSize.height) // Skip on bottom
{
if (tempTableView.contentOffset.y < 60) {
_header.hidden = NO;
float alpha = 1.0 - tempTableView.contentOffset.y / 64.0;
[_header setBackgroundColor:[UIColor colorWithRed: 0.1216 green: 0.1569 blue: 0.2078 alpha: alpha]];
}
if (tempTableView.contentOffset.y<=0)
{
CGRect contentViewFrame = _contentTableView.frame;
contentViewFrame.origin.y = 64;
_contentTableView.frame = contentViewFrame;
[_header setBackgroundColor:_headerColor];
_barsHidden = NO;
}
}
// Hide on scroll down
if (!_barsHidden &&
tempTableView.contentOffset.y > 0 && // Skip on top
tempTableView.contentOffset.y > oldOffset.y)
{
float alpha = 1.0 - tempTableView.contentOffset.y / 64.0;
[_header setBackgroundColor:[UIColor colorWithRed: 0.1216 green: 0.1569 blue: 0.2078 alpha: alpha]];
CGRect contentViewFrame = _contentTableView.frame;
contentViewFrame.origin.y = 84-tempTableView.contentOffset.y;
_contentTableView.frame = contentViewFrame;
if (tempTableView.contentOffset.y >= 64) {
_barsHidden = YES;
_header.hidden = YES;
}
}
}
答案 0 :(得分:0)
UITableView继承了UIScrollView委托,因此跟踪内容偏移量可以简化如下......
// in the view controller
self.contentTableView.delegate = self;
然后实施
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView == self.contentTableView) {
// header logic
self.header = [self alphaAtOffset:scrollView.contentOffset.y];
}
}
问题的下一部分是产生一个函数映射滚动位置到标题alpha。该函数的域应该是任何浮点数,范围应该是0.0到1.0。
我无法确切地告诉您代码中的内容,但通常这样的函数如下所示:
SOME_THRESHOLD
|
v
alpha == 1 ----------|
|\
| \
| \--------- alpha == 0
|
neg contentOffset.y | pos contentOffset.y
其中SOME_THRESHOLD是滚动偏移,您希望标题完全消失。这可以在代码中呈现如下......
#define SOME_THRESHOLD 64.0
- (CGFloat)alphaAtOffset:(CGFloat)offset {
if (offset < 0.0) return 1.0;
if (offset > SOME_THRESHOLD) return 0.0;
return 1.0 - (offset / SOME_THRESHOLD);
}