UITableView Section Header Scrolling

时间:2012-03-20 21:06:26

标签: ios uitableview header scroll

我跟着this post在滚动tableview时使我的节标题动画显示在视图之外。但是,当滚动回顶部时,标题不会返回到视图中。永远。鉴于我完全遵循了解决方案(我没有在其他任何地方设置contentInset),我感到非常困惑。谁能指出我正确的方向?这是我的代码:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
  CGPoint p = scrollView.contentOffset;

  CGFloat height = [self tableView:self.agendaDetailTable heightForHeaderInSection:0];

  if (p.y <= height && p.y > 0) {
    self.agendaDetailTable.contentInset = UIEdgeInsetsMake(-p.y, 0, 0, 0);
  } else if (p.y >= height) {
    self.agendaDetailTable.contentInset = UIEdgeInsetsMake(-height, 0, 0, 0);
  }
}

2 个答案:

答案 0 :(得分:4)

为表格启用bouncesalwaysBounceVertical,以允许它滚动内容的边缘,并在发生这种情况时重写偏移量。

答案 1 :(得分:1)

雅各布的解决方案效果很好。一个问题是滚动后内容偏离一个像素。我有一个带黑色边框的标题,滚动后可以看到问题,然后返回到顶部。通过改变p.y&gt; 0到p.y&gt; = 0滚动回零时我的标题正确恢复。

/* to fix floating headers */
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGPoint p = scrollView.contentOffset;

    CGFloat height = (float) DASHBOARD_SUMMARY_PANEL_HEADER_HEIGHT;

    if (p.y <= height && p.y >= 0) {
        self.SummaryPanelTableView.contentInset = UIEdgeInsetsMake(-p.y, 0, 0, 0);
    } else if (p.y >= height) {
        self.SummaryPanelTableView.contentInset = UIEdgeInsetsMake(-height, 0, 0, 0);
    }
}