UITableView headerView 滚动偏移

Posted

技术标签:

【中文标题】UITableView headerView 滚动偏移【英文标题】:UITableView headerView scroll offset 【发布时间】:2014-05-15 00:51:27 【问题描述】:

我遇到了UITableView 的问题,它是tableHeaderView 的属性。

我想让tableHeaderView 表现得像UISearchBar,即内容偏移量应该是tableHeaderView 的。 当表格视图无法填充视图的框架时,设置 contentOffset 等没有帮助。

这是当前行为的截图:

(来源:tubtub.de)

以及我希望它如何:

(来源:tubtub.de)

我在viewDidLoad 中插入headerView,如下所示:

- (void)viewDidLoad

    [super viewDidLoad];

    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    headerView.backgroundColor = [UIColor redColor];
    self.tableView.tableHeaderView = headerView;

非常感谢任何帮助或提示。谢谢!

编辑:我通过使用 UIScrollViewDelegate 和子类化 UITableView 使其工作。查看提供的github repo。

【问题讨论】:

【参考方案1】:

您可以通过 headerView 高度使用 setContentOffset:。 这个 contentOffset 只会在你有足够数量的数据被你的 headerView 高度关闭时才会发生。即)如果 tableView 不可滚动,因为您的屏幕截图中只有很少的数据,那么 headerView 仍然可见。但是,如果您有大量无法在屏幕上显示的数据,则会有 contentOffset。

试试这个 20 行。你会明白我的意思。

UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
headerView.backgroundColor = [UIColor redColor];
self.tableView.tableHeaderView = headerView;
[self.tableView setContentOffset:CGPointMake(0, 44)];

只有 3 行,此 contentOffset 将不起作用,并且在您的情况下这可能是您想要的行为,因为当您有额外的空间可以显示时,您不想隐藏 searchBar。

【讨论】:

无论表格显示多少数据,我都希望始终应用 contentOffset。我可能正试图破解我的方式......【参考方案2】:

我想出了实施自己的解决方案。

我利用UIScrollViewDelegate 并提出UITableView 的子类来动态计算contentSize

看看github repo here。

【讨论】:

【参考方案3】:

我会仔细检查表格本身的框架。通过将 headerView 的框架设置为从 0,0 开始,您可以指定它的原点应位于为表格指定的视图的左上角。

【讨论】:

以上是关于UITableView headerView 滚动偏移的主要内容,如果未能解决你的问题,请参考以下文章

iOS UITableview 在有 HeaderView的时候滚动到顶部

iOS UITableview 在有 HeaderView的时候滚动到顶部

滚动/调整 UITableView

如何在UICollectionView中添加HeaderView,如UITableView的tableHeaderView

如何检测 UITableView 标题何时滚动?

带有 uisearchDisplayController 的 UItableView 在 ios 7 中滚动时更改了 contentoffset