UITableView显示视图时不布置子视图的可见单元格



我有一个UITableView,它有多个部分,表中填充了自定义的UITableViewCell子类。在这些UITableViewCell子类中,我正在实现layoutSubviews以自定义标签的位置等。

除了视图加载时的第一批可见单元格外,单元格的所有子视图都在按应调整。它们和故事板中的布局完全一样,这不是我想要的。例如:

https://i.stack.imgur.com/L5GJh.png

注意:绿色和橙色边框是查看标签是否正在调整大小的视觉辅助。

滚动时,所有出现的新单元格都有它们的子视图,就像我在layoutSubviews中编程的那样。至于第一批可见的单元格,我可以将它们滚动到屏幕外,然后再滚动到屏幕上,然后子视图就完美地布置好了。例如:

https://i.stack.imgur.com/jgjch.png

tableView: cellForRowAtIndexPath:中,我在方法返回单元格之前调用[cell layoutIfNeeded]。如果我将其更改为[cell layoutSubviews],则会发生相反的情况,即第一批可见单元格按应有的布局,但滚动时加载的所有单元格都没有正确布局。

我曾尝试将[cell layoutIfNeeded]放入[tableview: willDisplayCell:,但没有成功。关于如何解决这个问题有什么想法吗?

提前感谢!

如果在启用"自动布局"的情况下在布局代码中设置框架,您会看到这种行为。这行不通。自动布局系统负责设置帧,并将覆盖您设置的值。

您应该使用约束指定布局,或者关闭"自动布局"。

最新更新