项目里有个需求,tableView下滑的时候,tableView偏移部分的颜色要保持和导航栏背景色同色(tableView背景是灰色,导航栏背景白色),不然会有撕裂感,类似微信的“他人资料”页的效果。
找了一下,tableview本身没有独立的控件,然后就用笨办法实现了一下。
创建一个白色背景的view,添加的tableview所在的的superview上。
@property (nonatomic, strong) UIView *topHeadBgView;
- (UIView *)topHeadBgView
{
if (!_topHeadBgView) {
_topHeadBgView = [UIView new];
_topHeadBgView.backgroundColor = [UIColor whiteColor];
}
return _topHeadBgView;
}
监听tableview的contentoffset。
[self.dataTableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];
[self addSubview:self.topHeadBgView];
白色view的尺寸跟着偏移量变就行了。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
if ([keyPath isEqualToString:@"contentOffset"])
{
NSValue *newvalue = change[NSKeyValueChangeNewKey];
CGFloat newoffset_y = newvalue.UIOffsetValue.vertical;
self.topHeadBgView.frame = CGRectMake(0, 0, SCREEN_WIDTH, -newoffset_y);
}
}
网友评论