IOS:隐藏/重新加载 tableView 标头

Posted

技术标签:

【中文标题】IOS:隐藏/重新加载 tableView 标头【英文标题】:IOS: Hide/Reload tableView header 【发布时间】:2015-08-24 19:30:05 【问题描述】:

我在故事板中使用自动布局为 tableview(!不是该部分)创建了标题。

我希望能够显示/隐藏它。

我该怎么做?

我试过这段代码:

self.tableView.tableHeaderView.hidden = !flag;

CGRect frame = self.tableView.tableHeaderView.frame;
frame.size.height = flag? k_HEIGHT_TableViewHeader : 0;
self.tableView.tableHeaderView.frame = frame;

它有效,但它给了我很多自动布局错误。

我也可以将其设置为零。如果是这样,我如何从情节提要中加载标题?

【问题讨论】:

【参考方案1】:

当您决定隐藏/显示时,您是否尝试过使用 [tableview reloadData]?

【讨论】:

是的,它隐藏/显示它,但如果它隐藏了框架并没有改变,所以我有空的空间而不是我的标题 此时您需要执行代码将您的表格视图移回顶部。这可以通过制作一个 IBOutlet NSLayoutConstraint *topConstraint 并将其连接到您的“顶部空间到 Superview”约束来完成。隐藏时将 topConstraint 更新为 0,显示时更新为 0(如 30 像素)。【参考方案2】:

因为您使用自动布局创建它,而不是更改框架,所以您应该将 tableHeaderView 上的高度约束从情节提要链接到您的类。然后,当您想要折叠它时,设置constraint.constant = 0 并通过设置constraint.constant = k_HEIGHT_TableViewHeader 再次展开它。之后您还需要在视图上调用layoutIfNeeded

也可以通过将layoutIfNeeded 包装在 UIView 动画块中轻松地为这种更改设置动画

[UIView animateWithDuration:0.5 animations:^[self.view layoutIfNeeded];];

Auto Layout Animation Reference

【讨论】:

可以,但是不能在storyboard中给tableView的header添加高度约束

以上是关于IOS:隐藏/重新加载 tableView 标头的主要内容,如果未能解决你的问题,请参考以下文章

如果当前视图是 tableViewController,iOS TableView 不会重新加载

iOS 为啥我的应用程序在重新启动之前不会将数据加载到 tableview 中?

如何获取 tableView 部分标题

如何让 UIRefreshControl 在隐藏后重新出现?

为啥重新加载 tableView 不能快速工作?

快速单击其中一个 tableview 单元格内的按钮后重新加载 tableview