[self.tableView reloadData];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.tableView insertSubview:self.header_backgroundView atIndex:0];
});
まず、tableViewが更新された後、[self.tableView insertSubview:self.header_backgroundView atIndex:0];メソッドを呼び出します。
効果を図に示します
次に、tableViewのスクロールイベントをリッスンし、スクロールプロセス中にサブビューを最下層に挿入します。
[scrollView vv_addObserver:scrollViewHelper forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew withBlock:^(NSDictionary * _Nonnull change, void * _Nonnull context) {
[scrollViewHelper scrollViewDidSroll:weakScrollView superViewInsetHeight:offset];
[weakScrollView insertSubview:headerConfig.backgroundView atIndex:0];
}];
これはcollectionViewとは少し異なります。テーブルビューのスクロールプロセス中にchangeメソッドを常に動員する必要があります。そうしないと、セルが上書きされます。
モニタリングまたはスクロールプロキシ方式で最下層に挿入されていない場合、スクロール後の効果は図のようになります。