swift - 嵌套的 UITableView 动态高度

标签 swift uitableview autolayout

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

嵌套表格没有问题,但我遇到了自动布局的问题。我已经尝试了所有我能找到的方法,但没有成功。

我尝试了嵌套 TableView 的高度约束,我在从 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)
    }
}

一切正常。有什么解决办法吗?

提前致谢。

最佳答案

Set Inner tableview 我的自定义类 AGTableView 和 height Constraint 都是必需的,

这个类设置了contantSize相同的表格 View 高度约束。

查看 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

关于swift - 嵌套的 UITableView 动态高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48941167/

相关文章:

ios - UIViewController 转换在使用下拉手势关闭时闪烁

html - 如何在 iOS 中呈现 HTML(标签、图像)?哪个组件去?

iphone - UITableView 中的多个原型(prototype)单元格?

ios - iOS 6 下的错误约束

ios - iOS6 自动布局异常

ios - 使用框架代码归档 iOS 项目

ios - 在表格 View 单元格上重复值 来自 API 响应的错误

qt - 复制 QTableView 的一部分

ios - 如何根据其内容调整 UITextView 的大小?

ios - YouTube 嵌入视频无法启动