UITableView:根据滚动偏移更改节标题高度

时间:2014-11-24 17:02:03

标签: ios uitableview dynamic height

我有一个简单的UITableView,并希望有一个'sticky'标题(当表滚动时它保持原样)。但是,我想根据滚动位置更改标题的高度。 这意味着例如标头最初是100px高。当您向下滚动表格时,标题高度应根据表格视图偏移量减小,直到它保持在最小高度,例如, 50像素。

以下是它的外观:

enter image description here enter image description here enter image description here enter image description here enter image description here

我已经构建了一个快速原型,但效果不佳。您是否有任何关于如何使其工作并同时保持平滑滚动表视图的想法?

这就是我的所作所为:

根据表视图偏移量返回节标题高度:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{

    CGFloat percentage = max(0, (SCROLL_OFFSET_HEADER_SHRINK - tableView.contentOffset.y) / SCROLL_OFFSET_HEADER_SHRINK);
    int newHeight = max(MIN_HEADER_HEIGHT, min(MAX_HEADER_HEIGHT, MIN_HEADER_HEIGHT + percentage * (MAX_HEADER_HEIGHT - MIN_HEADER_HEIGHT)));
    return newHeight;
}

更新每个滚动事件的表格视图,以确保标题高度发生变化:(这是一件坏事,导致表现不佳)

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if ((self.tableView.contentOffset.y > SCROLL_OFFSET_HEADER_SHRINK && 
         self.tableView.tableHeaderView.frame.size.height > MIN_HEADER_HEIGHT) ||
        self.tableView.contentOffset.y < SCROLL_OFFSET_HEADER_SHRINK) {
        [self.tableView reloadData];
    }
}

设置节标题高度而不必重新加载整个表的任何其他方法都会对我有所帮助!我希望这适用于iOS 5 +。

0 个答案:

没有答案