嵌套的uitable视图动态高度



我需要在tableview单元格中拥有一个嵌套的uitableview(实际上是一个单元格中的两个表(,以显示具有动态内容的不同列表(因此,我需要动态高度(。我的嵌套表不会滚动 - 我只需要订购不同种类的元素,例如文本,图片,字段等。要更加清楚 - 第一级是操作级别,每个操作都可以具有可变的指令量和行动。说明和动作应并排放置,并且操作单元的大小应为最高的桌子。

嵌套表中没有问题,但是我在自动布局上遇到了问题。我已经尝试了我能找到的一切,但没有成功。

我尝试了嵌套表视图的高度约束,我从tableview.contentsize.hight上更新了操作单元格的创建,但似乎contentsize根据每个行的估计尺寸返回高度,但不是实际的大小。<<<<<<<<<<<<<<<<<<<<<<

我试图重写嵌套表的内在内容大小:

UITableView {
    override var contentSize:CGSize {
        didSet {
            self.invalidateIntrinsicContentSize()
        }
    }
    override var intrinsicContentSize: CGSize {
        self.layoutIfNeeded()
        return CGSize(width: UIViewNoIntrinsicMetric, height: contentSize.height)
    }
}

什么都没有正常工作。有什么想法如何解决?

预先感谢您。

设置内部tableview我的自定义类AGTableView和高度约束都需要

此类设置contantSize相同的表视图高度约束。

查看GitHub autoheightincrementtableviewdemo

class AGTableView: UITableView {
    fileprivate var heightConstraint: NSLayoutConstraint!
    override init(frame: CGRect, style: UITableViewStyle) {
        super.init(frame: frame, style: style)
        self.associateConstraints()
        defaultInit()
    }
    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.associateConstraints()
        defaultInit()
    }
    func defaultInit(){
        self.keyboardDismissMode = .onDrag
        self.showsVerticalScrollIndicator = false
        self.showsHorizontalScrollIndicator = false
        self.tableFooterView = UIView(frame: .zero)
        self.tableHeaderView = UIView(frame: .zero)
        self.sectionFooterHeight = 0
        self.sectionHeaderHeight = 0
    }
    override open func layoutSubviews() {
        super.layoutSubviews()
        if self.heightConstraint != nil {
            self.heightConstraint.constant = self.contentSize.height
        }
        else{
            print("Set a heightConstraint to set cocontentSize with same")
        }
    }
    func associateConstraints() {
        // iterate through all text view's constraints and identify
        // height
        for constraint: NSLayoutConstraint in constraints {
            if constraint.firstAttribute == .height {
                if constraint.relation == .equal {
                    heightConstraint = constraint
                }
            }
        }
    }
}

注意:还设置estimatedRowHeight

self.rowHeight = UITableViewAutomaticDimension
self.estimatedRowHeight = height

最新更新