我需要在tableView单元格中使用嵌套的UITableView(实际上,在一个单元格中有两个表格)以显示具有动态内容的不同列表(因此,我需要动态高度)。我的嵌套表格不会滚动 - 我只需要订购不同类型的元素,如文本,图片,字段等。要更清楚 - 第一级是操作级别,每个操作都可以有不同数量的指令和行动。说明和操作应并排放置,操作单元应具有最高表的大小。
嵌套表没有问题,但我遇到了自动布局的问题。我已经尝试了所有我能找到的东西,但没有成功。
我尝试了嵌套表视图的高度约束,我在tableview.contentsize.hight中创建了操作单元格,但似乎contentize根据每行的估计大小返回高度,但不是实际大小。 / p>
我尝试重写嵌套表的内在内容大小:
UITableView {
override var contentSize:CGSize {
didSet {
self.invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize {
self.layoutIfNeeded()
return CGSize(width: UIViewNoIntrinsicMetric, height: contentSize.height)
}
}
什么都不能正常工作。有什么想法可以解决吗?
提前谢谢你。
答案 0 :(得分:1)
设置内部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