【问题标题】:Nested UITableView dynamic height嵌套 UITableView 动态高度
【发布时间】:2018-02-23 04:31:51
【问题描述】:

我需要在 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)
    }
}

一切正常。任何想法如何解决?

提前谢谢你。

【问题讨论】:

    标签: swift uitableview autolayout


    【解决方案1】:

    Set Inner 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
    

    【讨论】:

    • 感谢您的回答。您能否澄清一下——我需要对外部 tableView(或其单元格)做些什么吗?
    • 使外部表格视图单元格大小自动增加。并在内部 tableview 中设置此类。
    • 此类设置表格视图的高度,与您的表格视图内容大小相同。
    • 不能让它工作 :-( 似乎我错过了一些东西。hight 不断更新,但我想外面的单元格已经晚了。你能看看github.com/AlexChekanov/TaskCard-Table-in-Table 吗?这是您的解决方案的设置。
    • 有效!谢谢!你拯救了我的一天(甚至三天:-)
    猜你喜欢
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2023-04-11
    • 2012-12-22
    • 1970-01-01
    相关资源
    最近更新 更多