为什么 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
我有一个通用故事板(屏幕尺寸:600 x 600)的项目,其中包含覆盖 UITableViewCell
:
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