如何检测 UITableView header 何时从可见区域滚动?

How to detect when a UITableView header is scrolled off visible area?

如何检测 UITableView header(table header,而不是部分 header)何时滚出可见区域?

提前致谢!

我能想到几个可能的解决方案:

1) 您可以使用此委托的方法:

tableView:didEndDisplayingHeaderView:forSection:

但是,只有在方法中提供header时才会调用此方法

tableView:viewForHeaderInSection:

您说的是 'not section header',但您可以使用分组 table 视图中的第一部分 header 作为 table header 视图。 (分组是为了 header 会和 table 视图一起滚动)

2) 如果你不想使用grouped tableView和section header,你可以使用scrollView的delegate(UITableViewDelegate conforms to UIScrollViewDelegate)。只需检查 tableView 何时滚动到足以让 tableHeaderView 消失。见以下代码:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    static CGFloat lastY = 0;

    CGFloat currentY = scrollView.contentOffset.y;
    CGFloat headerHeight = self.headerView.frame.size.height;

    if ((lastY <= headerHeight) && (currentY > headerHeight)) {
        NSLog(@" ******* Header view just disappeared");
    }

    if ((lastY > headerHeight) && (currentY <= headerHeight)) {
        NSLog(@" ******* Header view just appeared");
    }

    lastY = currentY;
}

希望对您有所帮助。

以下是 tableView 如何指定其自身 tableViewHeader 是否可见 (Swift 3):

extension UITableView{

    var isTableHeaderViewVisible: Bool {
        guard let tableHeaderView = tableHeaderView else {
            return false
        }

        let currentYOffset = self.contentOffset.y;
        let headerHeight = tableHeaderView.frame.size.height;

        return currentYOffset < headerHeight
    }

}