Swift 为什么UITableViewCell.layoutSubviews()的frame.width为600(通用情节提要宽度),而不是320(特定iPhone设备)?

Swift 为什么UITableViewCell.layoutSubviews()的frame.width为600(通用情节提要宽度),而不是320(特定iPhone设备)?,swift,uitableview,layoutsubviews,Swift,Uitableview,Layoutsubviews,我有一个带有通用故事板(屏幕大小:600 x 600)的项目,其中包含一个覆盖UITableViewCell的类: class MyTableCell: UITableViewCell { ... } 显示此单元格的UITableView将MyTableCell注册为一个类,而不是使用原型单元格: myTableView.registerClass( MyTableCell.self, forCellReuseIdentifier: "myCell" ) MyTableCell然后

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

class MyTableCell: UITableViewCell 
{
    ...
}
显示此单元格的
UITableView
MyTableCell
注册为一个类,而不是使用原型单元格:

myTableView.registerClass( MyTableCell.self, forCellReuseIdentifier: "myCell" )
MyTableCell
然后覆盖
layoutSubviews

override func layoutSubviews ()
{
    super.layoutSubviews()
    let width = CGRectGetWidth( frame )
}
太好了!但是,返回的宽度是通用600,而不是我需要的特定于设备的320

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

layoutSubviews()
将在单元格生命周期的不同时间被调用,并且在移动时可能具有不同的值。当你第一次把它从故事板上取下来时,它的宽度将与你在故事板上看到的宽度相同。将其插入表视图后,其宽度将与表视图相同

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

如果您从未看到它更改为预期的320,这可能意味着您的表视图未正确配置为在情节提要中自动布局,并且在运行时实际以600像素宽绘制

在该方法上放置一个断点,并尝试将其输入调试控制台以查看表视图的大小。这将返回大量关于表视图的信息,包括其大小

po superview

谢谢@dave batton,我会调查一下,看看会发生什么。太棒了!不知何故,我的UITableView没有任何限制!我一定是在凌晨一点或者别的什么时候写的。谢谢@dave batton!