UItableView automaticDimension 不适用于 UIStackView

UItableView automaticDimension not working with UIStackView

我希望我的 UITableViewCell 正确计算其高度,使其底部与 UIStackView 底部匹配。

我了解到,要使 UITableView.automaticDimension 正常工作,您需要设置 UITableViewCell 的所有垂直约束,以便它可以计算其高度。

这就是我做不到的。我做了一个测试项目,我确定:

代码:

import Foundation
import UIKit

class IBAutomaticDimensionTableViewViewController: UIViewController, UITableViewDelegate, UITableViewDataSource  {
    
    @IBOutlet private weak var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.rowHeight = UITableView.automaticDimension
        tableView.register(
            IBAutomaticDimensionTableViewCell.nib,
            forCellReuseIdentifier: IBAutomaticDimensionTableViewCell.nibName
        )
        tableView.delegate = self
        tableView.dataSource = self
        tableView.reloadData()
//        view.layoutIfNeeded() Not working with or without it
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 5
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(
            withIdentifier: IBAutomaticDimensionTableViewCell.nibName,
            for: indexPath
        ) as! IBAutomaticDimensionTableViewCell
        return cell
    }
}

单元格的 xib 文件:

具有 Less Than or Equal 底部约束的结果:

具有 Greater Than or EqualEqual 底部约束的结果:

问题是宽高比限制。似乎他们优先考虑宽度而不是高度(这对我来说很奇怪,因为高度是一个常数值,我希望它优先于计算值,但 Apple 的想法不同)

在Android中你可以指定哪一个有偏好(宽度或高度),我不知道这里有什么办法(玩纵横比约束的关系没有解决它)

替换硬编码宽度值的纵横比约束(第一个视图 32 个,其余视图 20 个)解决了问题