Open zhenghongfeng opened 7 years ago
用kvo直接监听header的frame吧
如果是 master 分支的话,是这样的
3.0 有办法吗? 貌似 3.0 的 Header 是属于 TableView 的😂
3.0中确实在垂直滑动的时候把公共的 header 放在了 table 上了。监听貌似不是太好实现,倒是可以在每个自己的 item 的 scroll 回调中,判断当前的 item 是不是SwipeTableView
的currentItemView
,然后再根据 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) {
}
如果你导航条的透明渐变范围不大于公共 header 可移动范围的话,你直接监听你自己设定的 header 的 frame 变化就好了。
如果范围超过的话,那你们的需求就可能有点问题,因为悬停之后每个 item 的滚动距离是不同的,导航就没法处理了。不过,一般应该不会是这种情形的