UITableViewHeaderFooterView不遵守nib中的自动布局约束



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

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

我创建了一个具有与单元xib文件相同的自动布局约束的xib文件,并以与单元相同的方式将其加载到tableView.viewForFooterInSection中。根据需要,我使用UITableViewHeaderFooterView的子类,而不是UITableViewCell

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

页脚xib文件中的自动布局约束没有得到遵守。当我在页脚xib文件中设置不同的背景色时,表页脚显示xib视图长度的背景色。

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

有没有一种方法可以对从笔尖加载的UITableViewHeaderFooterViews使用自动布局?

您应该调用setNeedsUpdateConstraints()来更新您的视图。

来自苹果文档

控制视图的约束是否需要更新。当自定义视图的属性以可能影响约束的方式更改时,可以调用此方法来指示约束条件需要在将来的某个时刻进行更新。系统然后将调用updateConstraints作为其常规布局过程的一部分。在需要约束之前一次更新所有约束可确保当多个在布局过程之间对视图进行更改。

此外,您还可以更新视图投掷layoutSubviews()

布局子视图。此方法的默认实现iOS 5.1及更早版本上没有任何内容。否则,默认实现使用您设置的任何约束来确定大小和位置任何子视图。子类可以根据需要重写此方法对其子视图执行更精确的布局。您应该覆盖该方法仅当子视图不提供您想要的行为。您可以使用实现直接设置子视图的框架矩形。您不应该直接调用此方法。如果你想强制布局更新,请先调用setNeedsLayout方法到下一次图形更新。如果要更新视图,则调用layoutIfNeeded方法。

最新更新