我目前正在尝试有2个视图在对方的顶部在一个CustomCell。
我遇到的问题是只有顶视图得到显示。
调试视图时,显示顶视图的高度不明确,底视图的高度和垂直位置不明确。
我目前正在使用func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
方法设置这些自定义单元格的高度,将其设置为UITableView.automaticDimension
,并使用CustomCellslayoutSubviews
方法中的以下代码设置cosntraint。
我错过了什么?
谢谢
带有customCells的tableView当前的外观应该是一个greenView和一个blackView,blackView位于greenView下方,间距为10。
- 自定义表格视图单元格**
/// Adds it to contentView. This get's called in the `init()`
private func setupUI() {
setupCellContentView()
self.contentView.addSubview(topContainerView)
self.contentView.addSubview(bottomContainerView)
}
override func layoutSubviews() {
super.layoutSubviews()
let topContainerViewViewConstraints = [
topContainerView.topAnchor.constraint(equalTo: self.contentView.topAnchor, constant: 10),
topContainerView.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor, constant: 10),
topContainerView.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor, constant: -10),
]
let bottomContainerViewConstraints = [
bottomContainerView.topAnchor.constraint(equalTo: topContainerView.bottomAnchor, constant: 10),
bottomContainerView.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor, constant: 10),
bottomContainerView.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor, constant: -10),
bottomContainerView.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor, constant: -10)
]
NSLayoutConstraint.activate(topContainerViewViewConstraints)
NSLayoutConstraint.activate(bottomContainerViewConstraints)
}
/// Bottom container view is set up the exact same way as topContainerView.
lazy var topContainerView: UIView = {
let container = UIView()
container.translatesAutoresizingMaskIntoConstraints = false
container.backgroundColor = .green
return container
}()
- 表格视图**
class MainViewController: UIViewController {
private func setupUI() {
self.edgesForExtendedLayout = []
self.view.backgroundColor = .none
self.view.addSubview(contentView)
}
private func setupConstraintsForContentView() {
NSLayoutConstraint.activate([
contentView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),
contentView.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor),
contentView.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor),
contentView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor),
])
}
}
extension MainViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
viewModel.scoresData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell: ScoresTableViewCell = tableView.dequeueReusableCell(withIdentifier: "scoresTableViewCell",
for: indexPath) as? ScoresTableViewCell else {
return UITableViewCell()
}
cell.setupCellData(with: viewModel.scoresData[indexPath.row])
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
}
1条答案
按热度按时间wlzqhblo1#
您尚未向容器视图分配任何约束条件,以使它们具有任何高度。宽度是明确的,因为视图固定在内容视图的左侧和右侧,而内容视图的宽度又由表格视图本身确定;但是内容视图的高度是运行时试图确定的未知数,您没有给它任何帮助。
当顶部容器视图被给定高度时,其高度将不再是模糊的,并且因此其底部将是已知的,并且反过来底部容器视图的顶部将不再是模糊的。当底部容器视图被给定高度时,将不再有进一步的模糊,并且内容视图(以及因此单元格)将采用正确的高度。
所以你从调试器中收集到的信息是正确的,唯一让我感到惊讶的是你可以看到任何单元格!