nib中的autolayout约束不适用于UITableViewHeaderFooterView

时间:2015-06-25 08:08:19

标签: ios swift uitableview autolayout nib

我有一个UITableView,其中有几列数据。可重用单元格从xib文件加载,该文件具有适当的标签和自动布局约束。一切都很完美;表格列在不同设备上以及旋转设备时正确布局。

我遇到的问题是尝试创建一个表格页脚来显示表格中列的总数。

我创建了一个xib文件,它具有与单元格xib文件相同的自动布局限制,并以tableView.viewForFooterInSection加载它,就像我对单元格所做的那样。根据需要,我使用UITableViewHeaderFooterView的子类而不是UITableViewCell

awakeFromNib子类中的UITableViewHeaderFooterView方法设置背景颜色,因此我可以看到它在所有设备/方向上的大小正确,但是页脚xib文件中的标签没有得到布置以匹配表格单元格。

来自页脚xib文件的自动布局限制未得到遵守。当我在页脚xib文件中设置不同的背景颜色时,表格页脚会显示xib视图长度的背景颜色。

我是所有这项技术的新手,非常感谢帮助解决这个令人难以置信的令人沮丧的问题。

有没有办法对从nibs加载的UITableViewHeaderFooterViews使用autolayout?

1 个答案:

答案 0 :(得分:1)

您应该致电setNeedsUpdateConstraints()更新您的观点。

来自Apple文档

  

控制视图的约束是否需要更新。       当自定义视图的属性以会影响约束的方式更改时,可以调用此方法来指示   约束需要在将来的某个时候更新。系统   然后将调用updateConstraints作为其正常布局传递的一部分。   在需要之前一次更新约束确保了   你不会在多重时不必要地重新计算约束   在布局过程之间对视图进行了更改。

此外,您可以更新查看投掷layoutSubviews()

  

布置子视图。这个方法的默认实现   iOS 5.1及更早版本没有任何内容。否则,默认实现   使用您设置的任何约束来确定大小和位置   任何子视图。子类可以根据需要覆盖此方法   执行更精确的子视图布局。你应该覆盖   此方法仅在基于自动调整和基于约束的行为时使用   子视图不提供您想要的行为。你可以使用你的   实现直接设置子视图的框架矩形。   您不应该直接调用此方法。如果你想强迫一个   布局更新,请先调用setNeedsLayout方法   到下一个图纸更新。如果你想更新你的布局   立即查看,调用layoutIfNeeded方法。