Ios Swift-UITableViewController内部不可滚动的UITableViewController

Ios Swift-UITableViewController内部不可滚动的UITableViewController,ios,swift,uitableview,Ios,Swift,Uitableview,我正在用Swift制作一个应用程序,遇到了一个问题: 我有一个系统,人们可以发表“帖子”,并对这些“帖子”发表评论 为了显示这一点,我有一个UITableViewController子类,它的标题是post,单元格中有注释 现在我有一个屏幕,需要列出这些帖子。理想情况下,我希望每个帖子的评论都放在一个单元格中 这需要将UITableViewController子类(我们称之为PostTableViewController)嵌入到另一个UITableViewController的单元格中 问题是,

我正在用Swift制作一个应用程序,遇到了一个问题: 我有一个系统,人们可以发表“帖子”,并对这些“帖子”发表评论

为了显示这一点,我有一个UITableViewController子类,它的标题是post,单元格中有注释

现在我有一个屏幕,需要列出这些帖子。理想情况下,我希望每个帖子的评论都放在一个单元格中

这需要将UITableViewController子类(我们称之为
PostTableViewController
)嵌入到另一个UITableViewController的单元格中

问题是,我不希望每个ProfileTableViewController都在其单元格内滚动。我需要关闭tableViewController上的滚动,并使其高度扩展以适合其整个内容

我已经看了上面的答案,但仍然有问题。目前尚不清楚tableView是否正确调整大小,因为ProfileTableViewController在其各自单元格中的高度始终为0。如果手动设置恒定高度约束,我可以看到其中的一部分,但我希望它自动调整大小以适应tableView

我当前的约束设置是:

//dateView是我的tableViewCell中的另一个视图
profileViewController.view.topAnchor.constraint(equalTo:dateView.bottomAnchor).isActive=true
profileViewController.view.leadingAnchor.constraint(等式: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(等式:profileViewController.tableView.tableFooterView!.bottomAnchor)。isActive=true
profileViewController.tableView.topAnchor.constraint(等式:profileViewController.view.topAnchor).isActive=true
self.bottomAnchor.constraint(equalTo:homeViewController.view.bottomAnchor).isActive=true
那么,如何使tableView自动适应其内容,并设置约束,使tableViewCell自动调整到tableView

注(1):我的界面完全是代码;没有与此情况相关的故事板


注意(2):ProfileTableViewController的内容是动态的,因此约束在更改时需要更新。

要使tableview将其高度调整为其内容高度,您需要设置额外的高度约束,并在每次数据重新加载时更新

像这样声明约束,以便可以从类中的其他位置访问它

private lazy var heightConstraint:NSLayoutConstraint={
let constraint=tableView.heightAnchor.constraint(equalToConstant:0)
constraint.isActive=true
返回约束
}()
重新加载数据时,将约束常量值设置为tableviews内容高度

tableView.reloadData()
layoutIfNeeded()
heightConstraint.constant=tableView.contentSize.height
调用
layoutIfNeeded
将有助于tableview确定其内容大小

别忘了在tableview中关闭滚动

tableView.isScrolEnabled=false

在我的例子中,我通常创建一个自定义视图,其中包含UITableView,然后重写
intrinsicContentSize
属性以确定视图的大小。看看下面的代码

override var intrinsicContentSize: CGSize {
    self.tableView.layoutIfNeeded()
    let size = self.tableView.contentSize
    print("size = \(size)")
    return size
}
当您使用AutoLayout系统时,这种方式在代码中可能会很好地工作


如果使用UICollectionView,则可以使用
collectionViewContentSize
属性来代替
contentSize

对于那些将来关注此问题的人来说,我最终要做的是将文章分为tableView部分,而不是单元格,然后为profileTableViewController添加一个单元格,和下面的注释单元格。

使用惰性属性不意味着该集合只会被调用一次吗?是的,我们只需要创建一次约束。好的,它很接近,但某些tableViewCells没有完全显示;桌上的风景被遮住了。受影响的对象似乎非常随机。因此,我必须从
UIViewController
继承,而不是从
UITableViewController
,创建UIView的子类,将其作为子视图添加到ViewController中,然后将tableView作为该UIView的子视图添加?