ios - 调整 UITableView 的大小以适应内容

我正在创建一个应用程序,该应用程序将在 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/

相关文章:

iphone - 在 iOS 中将 HTML 转换为 NSAttributedString

ios - 如何在 iOS 8 中强制 View Controller 方向?

objective-c - 拆分一个 NSString 以访问一个特定的片段

objective-c - Objective-C 中的 NSString 标记化

ios - 如何在代码中获取我的 iOS 项目的当前版本?

objective-c - 声明一个 block 方法参数而不使用 typedef

ios - 当我在 UITextField 中按返回键时如何隐藏键盘?

ios - 如何以编程方式获取 iphone 的 MAC 地址

ios - 以编程方式滚动 UIScrollView

ios - 在 Objective-C 中从 NSMutableArray 中删除重复值的最佳方法是