嵌套 UITableView 动态高度
Posted
技术标签:
【中文标题】嵌套 UITableView 动态高度【英文标题】:Nested UITableView dynamic height 【发布时间】: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)
一切正常。任何想法如何解决?
提前谢谢你。
【问题讨论】:
【参考方案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 吗?这是您的解决方案的设置。 有效!谢谢!你拯救了我的一天(甚至三天:-)以上是关于嵌套 UITableView 动态高度的主要内容,如果未能解决你的问题,请参考以下文章
设置 tableviewcell 高度以显示具有动态高度单元格的完整内部/嵌套 uitableview
根据内容动态设置 UIScrollView 高度和 UITableView 高度