UITableViewCell子视图在使用大小类时报告宽度不正确



由于某些原因,在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]以获得子视图的"正确"值之后。

最新更新