调整UITableView的大小以适合内容

我正在创建一个应用程序,它将在中有一个问题,UILabel并在中显示选择题答案UITableView,每行显示一个选择题。问题和答案会有所不同,因此我需要UITableView保持高度变化。

我想sizeToFit在桌子旁找个工作。将表格的框架设置为所有内容的高度。

谁能建议我如何实现这一目标?


冉冉说
浏览 831回答 3
3回答

翻翻过去那场雪

实际上,我自己找到了答案。我只是创建一个新CGRect的tableView.frame用height的table.contentSize.height这台的高度UITableView到height它的内容。由于代码修改了UI,因此请不要忘记在主线程中运行它:dispatch_async(dispatch_get_main_queue(), ^{        //This code will run in the main thread:        CGRect frame = self.tableView.frame;        frame.size.height = self.tableView.contentSize.height;        self.tableView.frame = frame;    });

梦里花落0921

无需KVO,DispatchQueue或自行设置约束的Swift 5和4.2解决方案。该解决方案基于Gulz的答案。1)创建以下子类UITableView:import UIKitfinal class ContentSizedTableView: UITableView {    override var contentSize:CGSize {        didSet {            invalidateIntrinsicContentSize()        }    }    override var intrinsicContentSize: CGSize {        layoutIfNeeded()        return CGSize(width: UIView.noIntrinsicMetric, height: contentSize.height)    }}2)UITableView在布局中添加一个,并在所有侧面设置约束。将其类别设置为ContentSizedTableView。3)您应该看到一些错误,因为Storyboard并未考虑我们的子类intrinsicContentSize。通过打开大小检查器并将internalContentSize重写为占位符值来解决此问题。这是设计时间的替代。在运行时,它将在ContentSizedTableView类中使用重写更新:更改了Swift 4.2的代码。如果您使用的是早期版本,请使用UIViewNoIntrinsicMetric代替UIView.noIntrinsicMetric

守候你守候我

快速解决方案跟着这些步骤:1-在情节提要中设置表格的高度限制。2-从情节提要中拖动高度约束,并在视图控制器文件中为其创建@IBOutlet。    @IBOutlet weak var tableHeight: NSLayoutConstraint!3-然后您可以使用以下代码动态更改桌子的高度:override func viewWillLayoutSubviews() {    super.updateViewConstraints()    self.tableHeight?.constant = self.table.contentSize.height}更新资料如果为您剪切了最后一行,请尝试在willDisplay单元格函数中调用viewWillLayoutSubviews():func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {    self.viewWillLayoutSubviews()}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS