由于某些原因,在xcode 6中使用大小类时,我的单元格中的子视图的宽度不正确。我有一个UIImageView
,带有自动调整大小的布局(常数:顶部、L/R、底部为10)。
当从tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!)
调用以下内容时:
println("w: (cell.mapSnapshotImageView.bounds.size.width) h: (cell.mapSnapshotImageView.bounds.size.height)")
我总是得到:
w: 580.0 h: 80.0
即使它应该是基于我在iPhone 5S上的320x100手机的w: 300.0 h: 80.0
。
所有内容都显示正确,但我想使用子视图的宽度来计算其他子视图。有什么关于为什么会发生这种情况的想法吗?错误报告还是按设计工作?
编辑:
此问题仅适用于最初加载的单元格。当单元格被重复使用时,问题本身不会出现。复用细胞上的println
输出:
w: 300.0 h: 80.0
在访问帧之前调用willDisplayCell:forRowAtIndexPath
中的cell.layoutIfNeeded()
。那就行了。
我也遇到了这个问题。动态更改视图的大小时,子视图需要相应地更新其值。您正在引用更新之前的值。
我的工作是在更新后参考这些值。在这种情况下,它在viewDidAppear()中。希望这能提供一些用处。我花了一段时间想弄清楚。
在我的例子中,我在layoutSubviews
方法中获得了视图的边界,但我忘记了调用[super layoutSubviews]
。所以,我的代码看起来像吹
- (void)layoutSubviews {
[super layoutSubviews]; // this line to add
self.layerToAdd.frame = self.viewContainer.bounds;
}
您可以在方法layoutSubviews()中尝试,在调用[cell layoutIfNeeded]以获得子视图的"正确"值之后。