【发布时间】:2015-01-09 17:59:33
【问题描述】:
如何检测 UITableView 标头(表格标头,而不是节标头)何时滚出可见区域?
提前致谢!
【问题讨论】:
标签: ios uitableview scroll
如何检测 UITableView 标头(表格标头,而不是节标头)何时滚出可见区域?
提前致谢!
【问题讨论】:
标签: ios uitableview scroll
我能想到几个可能的解决方案:
1) 你可以使用这个委托的方法:
tableView:didEndDisplayingHeaderView:forSection:
但是,只有在方法中提供标头时才会调用此方法
tableView:viewForHeaderInSection:
您说“不是节标题”,但您可以将分组 tableView 中的第一个节标题用作表 headerView。 (分组是为了表头会和表格视图一起滚动)
2) 如果不想使用分组的tableView和section header,可以使用scrollView的delegate(UITableViewDelegate符合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
}
}
【讨论】: