使用自动布局对 uitableview 页脚视图进行运行时扩展

Posted

技术标签:

【中文标题】使用自动布局对 uitableview 页脚视图进行运行时扩展【英文标题】:runtime expansion of uitableview footerview using autolayout 【发布时间】:2014-03-27 17:09:17 【问题描述】:

我有一个 UIView,它是一个 uitableview 的页脚视图。在运行时,用户将文本输入到页脚视图内的 uitextview 中,该页脚视图应根据自动布局中的高度约束调整到文本内容的大小。

视图中的所有其他对象(标签、图像视图)都有适当的约束以适应文本视图的扩展。

但是整个footerview的高度不会改变大小,并且不可能在tableview的footerview高度上使用autolayout。

有人有解决办法吗?谢谢

【问题讨论】:

【参考方案1】:

还没有找到一个实际的、优雅的解决方案,但我已经推迟了通过使用解决方法来解决这个问题: 将用作页脚的视图框架设置为尽可能大。在我的情况下,这意味着给它大约 60px 的备用垂直空间。由于它是页脚,并且它下面没有任何东西可以重新定位,因此用户不会受到解决方法的影响。 页脚视图的内容固定在顶部,并有足够的空间在需要时展开。 作为记录:我的视图是从 nib 文件加载的。 尽管理论上在界面构建器中提供给***视图的大小仅用于设计时,并且运行时大小应根据约束和生成的固有大小来计算,但对于这种特定情况,我发现高度与它保持不变在IB。

【讨论】:

【参考方案2】:

我们可以通过以下代码来改变footer view运行时的高度:

func methodToChangeTableViewFooterHeight()

    var footerView:UIView = self._tableView.tableFooterView! as UIView
    var frame:CGRect = footerView.frame
    frame.size.height = self.heightCollectionCS.constant + 10
    footerView.frame = frame
    self._tableView.tableFooterView! = footerView

这里,self.heightCollectionCS.constant 是我们的 Collection View 的高度约束。 我们可以在那个地方使用文本内容高度。

【讨论】:

【参考方案3】:

您可以尝试在每次页脚高度更改时重新设置页脚视图,以通知表格它应该更改页脚高度。或使用插图。在页脚视图中:

SetNeedsLayout()
LayoutIfNeeded()
ownertable.TableFooterView = this

【讨论】:

能否请您扩展上述方法?我尝试的是先设置页脚,然后通过代码添加约束。这在 ios 8 中运行良好,但在 iOS 7 中它崩溃了。似乎 viewDidLayoutSubViews 的 tableviews 实现没有调用 super。请帮忙。 是的,在 iOS 7 上,不是每个控件的每个部分都支持自动布局。 那么你建议如何解决这个问题?【参考方案4】:

很抱歉,很久以前就误读了这个问题。您可以通过tableview的属性tableFooterView直接访问页脚。

您可以在 xib 或 viewDidLoad: 中创建默认页脚。一旦您需要增加页脚的大小,您可以从该属性中拉出UIView,并在必要时编辑其框架以使其更大。

因此,请确保为 tableFooterView 分配了一个 UIView,因为它默认为 nil。为了让高度更高,你可以使用self.tableView.tableFooterView.frame = CGRectMake(whatever rect you need);

【讨论】:

TABLE 页脚的节号是多少?

以上是关于使用自动布局对 uitableview 页脚视图进行运行时扩展的主要内容,如果未能解决你的问题,请参考以下文章

在代码中设置自动布局约束时出现奇怪的问题

UITableView 页眉和页脚高度与 Storyboard 布局不对应

使用故事板中的自动布局使 UIButtons 居中

使用自动布局将子视图添加到 UITableView 不会设置其框架

使用自动布局强制 UITableView 中的 UIView 填满屏幕

使用自动布局动画 UIView 动画 UITableView 复选标记