table 视图单元格大小取决于故事板中的预览设备大小

table view cell size depends on the preview device size in storyboard

我 运行 我的应用程序在我的 iPhone 6 plus 上,屏幕宽度为 414 点,如果我将预览设备设置为 iPhone 7,它有一个屏幕375点的宽度,第一次加载table时,我在viewdidload中打印出table的大小,它的宽度是414,但是table的单元格都有一个宽度375的,我上下滚动后,宽度变成了414。在多个UITableViewController中测试,都给出了相同的结果。

我的问题是:

为什么 table 视图单元格的大小取决于预览设备的大小?

如何使单元格在首次加载时具有正确的大小?

tableView.layoutIfNeeded(), tableView.layoutSubViews() 不起作用。

每次从 Storyboard 加载视图时,它最初的大小与 Storyboard 中指定的大小完全相同,然后当它被添加到视图层次结构时,它的框架将被调整(通过自动布局或您的自定义代码) ).

所以在你的例子中,当一个单元格第一次从情节提要中加载时,它的宽度为 414 点(假设你的 tableView 与视图控制器具有相同的宽度),但是当它被放入实际的视图层次结构中时,它将相应地调整大小(375pt,等于您的 tableview 的宽度)。

tableview 的大小是正确的 414(我的设备大小),但单元格大小是模拟指标的大小,经过几个月的研究,这是我想出的答案:

在我的单元格 class 中,覆盖 awakeFromNib(),将 frame.size.width 设置为 UIScreen.main.bounds.width,然后调用 layoutIfNeed()