swift 在自定义UITableViewCell中设置两个视图的约束时遇到问题,一个在顶部,一个在底部

2uluyalo  于 2023-03-07  发布在  Swift
关注(0)|答案(1)|浏览(146)

我目前正在尝试有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
    }
}
wlzqhblo

wlzqhblo1#

您尚未向容器视图分配任何约束条件,以使它们具有任何高度。宽度是明确的,因为视图固定在内容视图的左侧和右侧,而内容视图的宽度又由表格视图本身确定;但是内容视图的高度是运行时试图确定的未知数,您没有给它任何帮助。
当顶部容器视图被给定高度时,其高度将不再是模糊的,并且因此其底部将是已知的,并且反过来底部容器视图的顶部将不再是模糊的。当底部容器视图被给定高度时,将不再有进一步的模糊,并且内容视图(以及因此单元格)将采用正确的高度。
所以你从调试器中收集到的信息是正确的,唯一让我感到惊讶的是你可以看到任何单元格!

相关问题