我正在使用Swift制作应用程序,但遇到了一个问题: 我有一个系统,人们可以在其中发布“帖子”,并对这些“帖子”发表评论。
为了显示此内容,我有一个UITableViewController子类,该子类具有该帖子作为标题,以及单元格中的注释。
现在我有一个屏幕需要列出这些帖子。理想情况下,我希望每个帖子及其评论都放在一个单元格中。
这将需要在另一个UITableViewController的单元格中嵌入UITableViewController子类(我们将其称为PostTableViewController
)。
问题是,我不希望每个ProfileTableViewControllers在其单元格内滚动。我需要关闭tableViewController上的滚动,并使其高度扩展以适合其整个内容。
我已经查看了this post上的答案,但是仍然遇到问题。目前尚不清楚tableView是否正确调整大小,因为ProfileTableViewController在其各自单元格中的高度始终为0。如果手动设置一个恒定的高度约束,我可以看到其中的一部分,但是我希望它自动调整大小为适合tableView。
我当前的约束设置是:
//dateView is another view in my tableViewCell
profileViewController.view.topAnchor.constraint(equalTo: dateView.bottomAnchor).isActive = true
profileViewController.view.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
profileViewController.view.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
profileViewController.view.widthAnchor.constraint(equalTo: self.widthAnchor).isActive = true
profileViewController.view.bottomAnchor.constraint(equalTo: profileViewController.tableView.tableFooterView!.bottomAnchor).isActive = true
profileViewController.tableView.topAnchor.constraint(equalTo: profileViewController.view.topAnchor).isActive = true
self.bottomAnchor.constraint(equalTo: homeViewController.view.bottomAnchor).isActive = true
那么我如何才能使tableView自动适合其内容,并设置约束,以便tableViewCell可以自动调整为tableView的大小?
注意(1):我的界面完全是代码;没有与此情况相关的情节提要
注意(2)::ProfileTableViewControllers的内容是动态的,因此,约束在更改时需要更新。
答案 0 :(得分:0)
要让tableview将其高度调整到其内容高度,您将需要设置一个附加的高度约束,并在每次重新加载数据时对其进行更新。
这样声明约束,以便可以从类中的其他位置访问它。
private lazy var heightConstraint: NSLayoutConstraint = {
let constraint = tableView.heightAnchor.constraint(equalToConstant: 0)
constraint.isActive = true
return constraint
}()
并在重新加载数据时,将约束常量值设置为tableviews的内容高度
tableView.reloadData()
layoutIfNeeded()
heightConstraint.constant = tableView.contentSize.height
调用layoutIfNeeded
将有助于tableview确定其内容大小
别忘了在表格视图中关闭滚动显示
tableView.isScrollEnabled = false
答案 1 :(得分:0)
就我而言,我通常创建一个自定义视图,该视图内部具有UITableView,然后重写intrinsicContentSize
属性来确定视图的大小。看下面的代码。
override var intrinsicContentSize: CGSize {
self.tableView.layoutIfNeeded()
let size = self.tableView.contentSize
print("size = \(size)")
return size
}
在使用AutoLayout System时,这种方式在代码中可能会很好地工作。
如果使用UICollectionView,则可以使用collectionViewContentSize
属性代替contentSize
。
答案 2 :(得分:0)
对于那些将来会关注此问题的人,我最终要做的是将帖子分成tableView部分而不是单元格,然后为profileTableViewController添加一个单元格,并在其下方添加注释。
>