为什么 UITableViewCell.layoutSubviews() 将 frame.width 设为 600(通用故事板宽度)而不是 320(特定 iPhone 设备)?

Why does UITableViewCell.layoutSubviews() have frame.width as 600 (universal storyboard width) and not 320 (specific iPhone device)?

我有一个通用故事板(屏幕尺寸:600 x 600)的项目,其中包含覆盖 UITableViewCell:

的 class
class MyTableCell: UITableViewCell 
{
    ...
}

显示此单元格的 UITableView 没有使用原型单元格,而是将 MyTableCell 注册为 class:

myTableView.registerClass( MyTableCell.self, forCellReuseIdentifier: "myCell" )

MyTableCell 然后覆盖 layoutSubviews:

override func layoutSubviews ()
{
    super.layoutSubviews()
    let width = CGRectGetWidth( frame )
}

太棒了!但是,返回的宽度是通用的 600,而不是我需要的特定于设备的 320。

请问我做错了什么?谢谢。

layoutSubviews() 将在单元生命周期的不同时间被调用,并且随着它的移动可以有不同的值。当您第一次将它从情节提要中取出时,它将具有您在情节提要中看到的宽度。插入 table 视图后,它将具有与 table 视图相同的宽度。

通常这不是问题。它会一次以错误的大小被调用,然后以正确的大小再次调用。但它在调试器中可能看起来很混乱。

如果您从未看到它变为您期望的 320,这可能意味着您的 table 视图没有正确配置以在故事板中自动布局,并且实际上在运行时以 600 像素宽绘制.

在该方法上放置一个断点,然后尝试将其输入调试控制台以查看 table 视图大小是多少。这应该 return 很多关于 table 视图的信息,包括它的大小。

po superview