我正在创建一个应用程序,该应用程序将在 UILabel
中有一个问题,并在 UITableView
中显示一个多项选择答案,每行显示一个多项选择。问题和答案会有所不同,所以我需要这个 UITableView
的高度是动态的。
我想为该表找到一个 sizeToFit
解决方法。表格的框架设置为其所有内容的高度。
谁能建议我如何实现这一目标?
最佳答案
无需 KVO、DispatchQueue 或自行设置约束的 Swift 5 和 4.2 解决方案。
此解决方案基于 Gulz's answer .
1) 创建UITableView
的子类:
import UIKit
final 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
。通过打开大小检查器并将intrinsicContentSize 覆盖为占位符值来解决此问题。这是设计时的替代。在运行时它将使用我们的 ContentSizedTableView
类中的覆盖
更新:更改了 Swift 4.2 的代码。如果您使用的是旧版本,请使用 UIViewNoIntrinsicMetric
而不是 UIView.noIntrinsicMetric
https://stackoverflow.com/questions/2595118/