【问题标题】:UITableViewCell subviews report incorrect width when using size classesUITableViewCell 子视图在使用尺寸类时报告不正确的宽度
【发布时间】:2014-08-28 23:54:46
【问题描述】:

由于某种原因,在 xcode 6 中使用尺寸类时,我的单元格中的子视图宽度不正确。我有一个 UIImageView 带有自动布局的尺寸(常数:10 用于顶部、L/R、底部)。

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

即使它应该w: 300.0 h: 80.0,基于我在 iPhone 5S 上的 320x100 单元格。

一切都正确显示,但我想使用子视图的宽度对其他子视图进行一些计算。关于为什么会发生这种情况的任何想法?错误报告或按设计工作?

编辑:

此问题仅适用于最初加载的单元格。当细胞被重复使用时,问题不会出现。 println 重用单元格的输出:

w: 300.0 h: 80.0

【问题讨论】:

  • 签入willDisplayCell:atIndexPath:会不会出现同样的不一致?
  • 同样的结果,w: 580.0 h: 80.0
  • 搞笑...试试这些台词:println("w: \(cell.contentView.frame.size.width)")println("w: \(cell.contentView.subviews[0].frame.size.width)")。结果相当令人惊讶。
  • 有趣。 contentView 返回适当大小的框架,但不返回子视图。

标签: ios uitableview swift xcode6


【解决方案1】:

在访问帧之前调用willDisplayCell:forRowAtIndexPath 中的cell.layoutIfNeeded()。这样就可以了。

【讨论】:

  • ohh...BEFORE 是一个键 :)
  • 它工作正常,因此我不得不在 viewDidAppear() 方法中重新加载 tableView。
【解决方案2】:

我也遇到了这个问题。当您动态更改视图的大小时,子视图需要相应地更新它们的值。您在更新之前引用这些值。

我的解决方法是在更新后引用这些值。在本例中,它位于 viewDidAppear() 中。希望这提供一些用处。我花了一段时间试图弄清楚。

【讨论】:

  • 会看看,抱歉耽搁了!
  • 这是我能够始终如一地获得正确单元格大小的唯一方法。在 NavigationController 推送时,它不会触发,直到动画中的幻灯片完成,这很烦人
  • 迟到的“接受”,想就此结束循环。这只是一个奇怪的工作流程。
【解决方案3】:

在我的情况下,我在 layoutSubviews 方法中获得了视图的边界,但我忘记调用 [super layoutSubviews]。所以,我的代码看起来很糟糕

- (void)layoutSubviews {
    [super layoutSubviews]; // this line to add
    self.layerToAdd.frame = self.viewContainer.bounds;
}

【讨论】:

    【解决方案4】:

    您可以尝试在方法 layoutSubviews() 中调用 [cell layoutIfNeeded] 以获取子视图的“正确”值。

    【讨论】:

    • 这不起作用。我正在尝试仅在 uitableviewcell 的内容视图的子视图之一上设置顶角半径。我在重写的 layoutSubViews 方法中执行此操作。仅适用于该特定单元格的第二次加载。
    猜你喜欢
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    相关资源
    最近更新 更多