UITableView中没有显示UITableView

Joe*_*e L 4 ios swift uistackview

我有一个UIStackView可以显示标签,图像,表视图或根据用户选择的任何内容.这是我当前动态视图的层次结构:

  • UIStackView_Parent
    • UILabel - 一些文字,固定视图
    • UIStackView_Child - 这是可以显示多个内容或什么都不显示的容器
    • UIView - 另一个固定视图

当我UIStackView_Child.addArrangedSubview(...)使用标签或图像调用时,它可以完美地工作,但addArrangedSubview(tableView)不会显示表格.我tableView.scrollEnabled = false根据单元格的数量将框架设置为固定高度并定义了表格cellHeight.

任何帮助将不胜感激,谢谢!

kli*_*ron 8

在没有明确设置框架高度和宽度的情况下执行此操作的另一种方法是将表视图嵌入到空视图中,将表视图固定到顶部,底部,左侧和右侧,并将"大于或等于"约束设置为表格视图的高度.


Otr*_*tra 5

那是因为stackview尝试尽可能多地压缩内容。当您最初添加一个表视图时,我假设它没有内容,所以stackview会将宽度压缩为0,因为它没有内容可显示。您必须执行以下两项操作之一:

在表格中填充数据后,您必须设置tableView的框架。我通过计算每个单元的大小来做到这一点。我知道宽度将和包含stackview的视图一样大。所以最终像是

let estimatedHeight = tableView.numberOfRows(inSection: 0) //You may need to modify as necessary
let width = parentView.frame.size.width
tableView.frame = CGRect(x: 0, y: 0, width: width, height: estimatedHeight)
Run Code Online (Sandbox Code Playgroud)

设置tableView的框架后,stackview应该会自动调整。

  • “您必须做两件事之一”另一件事是什么? (7认同)
  • 其他事情可能是表视图的高度限制。例如,“tableView.heightAnchor.constraint(equalToConstant: 42).isActive = true”。设置堆栈视图高度也可以。 (2认同)