在单元格

时间:2018-02-09 21:44:00

标签: ios iphone swift uitableview cell

我需要在单元格(静态表格)中显示动态表格视图。相反,使用部分对我来说是不够的。但我不希望这个表是可滚动的,所以整个表必须立即出现。问题是此表大小[和行数以及每行大小]根据显示的内容而变化。如何将单元格(包含表格)自动调整属性与一个必须一次显示所有内容的表格相关联?

目前我在单元格内部有tableView,并且约束将它绑定到所有4个边。第一个表(不是单元格内的一个)rowHeight属性设置为UITableViewAutomaticDimension,但单元格内的表格并未完全显示。 如果我将静态单元格高度设置为大于tableView(单元格内部)高度的值,则会显示整个表格,并且还会显示其下方的额外空间(因为表格与单元格的4个边界限)

那么,关于如何在一个动态地具有完美尺寸的单元格内显示整个表的任何想法呢?

ps:我尝试在单元格内使用集合视图。不幸的是,它不符合我的目的。

谢谢!

更新

我尝试为内部表创建一个类并使用(由iamirzhan指向)contentSize didSet,如下所示:

override var contentSize:CGSize {
        didSet {
            self.invalidateIntrinsicContentSize()
        }
    }

然后我使用此方法调用一个函数来调整包含表的单元格的大小:self.frame.size.height = table.contentSize.height。该函数位于此单元格自己的类中。 这很有效,表现在完全出现了。问题是它重叠在它下面的单元格,所以我仍然在寻找解决方案。

2 个答案:

答案 0 :(得分:0)

我不明白为什么这需要2个tableviews。静态部分应该是uitableviewheaderfooters或者只是一个UIStackView。但要回答您的问题,只需查询您的子tableView的大小,并在tableView:heightForRowAtIndexPath:中将其返回到外部tableview。子tableView的高度只是其所有子节点(包括任何页眉/页脚)的高度的总和。这通常不难计算,除非你使用类似webview的东西,你需要实际加载内容并异步获取大小。您可以使用UIView.sizeThatFits(_:)计算基于内在内容大小的元素大小。其他元素应该在故事板中具有固定的大小或常量,您可以总结。

答案 1 :(得分:0)

对于内部tableView,你应该编写这样的实现。

首先,禁用scrollEnable标志

然后你应该覆盖tableView

的intrinsicContentSize方法

您的内部tableView自定义类:

class IntrinsicTableView: UITableView {

   override var contentSize:CGSize {
        didSet {
            self.invalidateIntrinsicContentSize()
        }
    }

   override var intrinsicContentSize: CGSize {
        self.layoutIfNeeded()
        return self.contentSize
    }
}

现在,删除高度约束,高度将按其内容计算。