嵌套UITableView动态高度

Ale*_*nov 4 uitableview autolayout swift

我需要在 tableView 单元格(实际上,一个单元格中有两个表)中有一个嵌套的 UITableView 来显示具有动态内容的不同列表(因此,我需要动态高度)。我的嵌套表不会滚动\xe2\x80\x94我只需要它们来排序不同类型的元素,如文本、图片、字段等。更清楚地说\xe2\x80\x94第一级是操作级别,每个操作可以具有可变数量的指令和动作。指令和操作应并排放置,操作单元应具有最高表格的大小。

\n\n

嵌套表格没有问题,但我遇到了自动布局的问题。我\xe2\x80\x99已经尝试了我能找到的一切,但没有成功。

\n\n

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

\n\n

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

\n\n
UITableView {\n\n    override var contentSize:CGSize {\n        didSet {\n            self.invalidateIntrinsicContentSize()\n        }\n    }\n\n    override var intrinsicContentSize: CGSize {\n        self.layoutIfNeeded()\n        return CGSize(width: UIViewNoIntrinsicMetric, height: contentSize.height)\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

没有什么能正常工作。有什么想法可以解决吗?

\n\n

先感谢您。

\n

Ash*_*iya 5

设置内部表格视图我的自定义类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
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:还要设置一个estimatedRowHeight

self.rowHeight = UITableViewAutomaticDimension
self.estimatedRowHeight = height
Run Code Online (Sandbox Code Playgroud)