liangdrime / SwipeTableView

Both scroll horizontal and vertical for segment scrollview which have a same header. — 类似半糖、美丽说主页与QQ音乐歌曲列表布局效果,实现不同菜单的左右滑动切换,同时支持类似tableview的顶部工具栏悬停(既可以左右滑动,又可以上下滑动)。兼容下拉刷新,自定义 collectionview实现自适应 contentSize 还可实现瀑布流功能
MIT License
2.29k stars 444 forks source link

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

Open zhenghongfeng opened 7 years ago

liangdrime commented 7 years ago

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

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

zhenghongfeng commented 7 years ago

用kvo直接监听header的frame吧

liangdrime commented 7 years ago

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

conversun commented 7 years ago

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

liangdrime commented 6 years ago

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

conversun commented 6 years ago

@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;

}
liangdrime commented 6 years ago

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

if (!self) return;

if (... self->_tag) {

}