【问题标题】:Frame change of table view cell's subview won't take place until view did appear表格视图单元格的子视图的帧更改在视图出现之前不会发生
【发布时间】:2015-08-11 23:27:45
【问题描述】:

我想在cellForRowAtIndexPath 中设置UITableViewCell 的子视图时使用以下代码:

cellSubView.center = CGPointZero

打印出框架的坐标表明框架更新成功,但是视图仍然显示在界面构建器中给定的位置。

使用以下代码覆盖 viewDidAppear 函数将解决此问题:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    self.tableView.reloadData()
}

但这会导致闪烁:当我更改其中一个单元格的子视图位置时,表格视图已经出现了。

如何在视图出现之前更改框架?

【问题讨论】:

  • 你用过AutoLayout吗?
  • 如果您使用的是自动布局,请尝试在 viewWillLayoutSubviews() 委托方法中重新加载表格。
  • 从 iOS8 开始,您实际上不应该在代码中调整框架。 iOS8 对帧的代码更改通常会被系统为您添加的约束所忽略或更改。相反,您应该使用约束。为 cellSubView 添加一个约束,使其在其容器视图中居中。
  • 你为什么不把它作为答案?

标签: ios uitableview swift frame viewdidappear


【解决方案1】:

如果您使用了 autoLayout,请检查它是否会自动创建约束。 如果是,那么您可以改为更改这些约束的常量。 如果您没有使用 autoLayout,请调用 layoutIfNeeded 并查看是否有任何改变。 我的赌注是 autoLayout 会自动创建约束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多