为了账号安全,请及时绑定邮箱和手机立即绑定

调整UITableView的大小以适合内容

调整UITableView的大小以适合内容

iOS
冉冉说 2019-10-16 10:34:49
我正在创建一个应用程序,它将在中有一个问题,UILabel并在中显示选择题答案UITableView,每行显示一个选择题。问题和答案会有所不同,因此我需要UITableView保持高度变化。我想sizeToFit在桌子旁找个工作。将表格的框架设置为所有内容的高度。谁能建议我如何实现这一目标?
查看完整描述

3 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

实际上,我自己找到了答案。


我只是创建一个新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;

    });


查看完整回答
反对 回复 2019-10-16
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

无需KVO,DispatchQueue或自行设置约束的Swift 5和4.2解决方案。


该解决方案基于Gulz的答案。


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。通过打开大小检查器并将internalContentSize重写为占位符值来解决此问题。这是设计时间的替代。在运行时,它将在ContentSizedTableView类中使用重写


更新:更改了Swift 4.2的代码。如果您使用的是早期版本,请使用UIViewNoIntrinsicMetric代替UIView.noIntrinsicMetric


查看完整回答
反对 回复 2019-10-16
?
守候你守候我

TA贡献1802条经验 获得超10个赞

快速解决方案


跟着这些步骤:


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()

}


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 826 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信