【问题标题】:Using uistackviews in uitableviewcell在 uitableviewcell 中使用 uistackviews
【发布时间】:2017-03-02 12:05:24
【问题描述】:

我正在尝试在 tableview 单元格中使用 stackview。我的堆栈视图有两个水平对齐的标签。我在 IB 中添加了一个尺寸类覆盖,以垂直对齐标签以获得紧凑的宽度。

标签的对齐方式确实按预期发生了变化,但单元格的高度不正确,直到我将单元格向外滚动并返回。

我的表格视图指定使用以下方法计算单元格的高度:

  // Automatic row height calculation
  tableView.rowHeight = UITableViewAutomaticDimension
  tableView.estimatedRowHeight = 68.0 // set to whatever your "average" cell height is

因此,在 iPhone SE 中,我希望标签在横向中并排,但在纵向时一个在另一个之上。如果我以纵向模式启动我的应用程序,则标签与预期的一样,但是当我旋转到横向时,它们会并排移动,但单元格仍然具有纵向的高度。如果我将单元格滚动出屏幕,则单元格高度会得到纠正。

我错过了什么?

请帮忙。

谢谢。

【问题讨论】:

  • 我想我将放弃尝试在 tableview 单元格中使用具有 size 类的堆栈视图。我可以在 Xcode 8 中使用“Vary for traits”实现几乎相同的效果。这基本上意味着我根据尺寸类在我的 UI 元素上安装和卸载约束。堆栈视图会使这变得容易得多;具体来说,您只需更改对齐属性即可将标签从水平对齐更改为垂直对齐,而不必安装和卸载一些约束。 Stackview 很容易采用,所以如果我得到一些新信息,我会重新考虑。

标签: uitableview uistackview


【解决方案1】:

好的。看起来可能有一个合法的错误,但我继续做一些挖掘,因为堆栈视图更容易使用。最后,在https://www.raywenderlich.com 中得到了答案。

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
  DispatchQueue.main.async {
    self.tableView.beginUpdates()
    self.tableView.endUpdates()
  }
}

是的!在主队列中异步包装开始/结束更新调用可以正确计算单元格的高度。永远不会想到它,因为 traitCollectionDidChange() 已经在主队列中运行。

详情请见Using uistackviews in uitableviewcell

谢谢,杰瑞!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-08
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2023-03-16
    相关资源
    最近更新 更多