liangdrime/SwipeTableView

亲 怎么监听SwipeTableView上下垂直滚动呢?我想根据偏移量改变导航条的透明度!- (void)swipeTableViewDidScroll:(SwipeTableView *)swipeView这个代理方法是监听每个item水平滚动的

Opened this issue · 7 comments

亲 怎么监听SwipeTableView上下垂直滚动呢?我想根据偏移量改变导航条的透明度!- (void)swipeTableViewDidScroll:(SwipeTableView *)swipeView这个代理方法是监听每个item水平滚动的

如果你导航条的透明渐变范围不大于公共 header 可移动范围的话,你直接监听你自己设定的 header 的 frame 变化就好了。

如果范围超过的话,那你们的需求就可能有点问题,因为悬停之后每个 item 的滚动距离是不同的,导航就没法处理了。不过,一般应该不会是这种情形的

用kvo直接监听header的frame吧

如果是 master 分支的话,是这样的

3.0 有办法吗? 貌似 3.0 的 Header 是属于 TableView 的😂

3.0中确实在垂直滑动的时候把公共的 header 放在了 table 上了。监听貌似不是太好实现,倒是可以在每个自己的 item 的 scroll 回调中,判断当前的 item 是不是SwipeTableViewcurrentItemView,然后再根据 offset 处理。更好的方式还没想到,如果有更好的方式,欢迎回复🤝

@Roylee-ML
最终还是强行解决了...

在 swipeTableViewCurrentItemIndexDidChange 中记录 index, 通过 index 区分

- (void)swipeTableViewCurrentItemIndexDidChange:(SwipeTableView *)swipeView {
    self.sliderBarView.selectedSegmentIndex = swipeView.currentItemIndex;
    _tag = swipeView.currentItemIndex;
    
}
- (UITableView *)setupTableViewWithTag:(NSInteger)tag{
    UITableView *tableView = [[UITableView alloc]initWithFrame:self.swipeTableView.bounds style:UITableViewStylePlain];
    tableView.tag = tag;
    
    @weakify(self);
    [RACObserve(tableView, contentOffset)subscribeNext:^(NSValue *x) {
        @strongify(self);
        if (tableView.tag == _tag) {
            CGFloat offsetY = [x CGPointValue].y;
            [self.navView animationWithOffsetY:offsetY];
            
        }
    }];
    return tableView;
    
}

嗯,这样也行。还有个问题,你的_tag是属性还是实例变量呢?如果是实例变量的话,在 RAC 的 block 中你需要做下处理,否则会有循环引用

if (!self) return;
    
if (... self->_tag) {
        
}