根据 Swift 4 中的 Table View 高度动态调整布局

use*_*456 1 uitableview ios swift

我有一个包含表格视图、图像视图和许多标签的滚动视图。以下是控件的示例位置:

  • 图像视图1
  • 表格视图
  • 标签 1
  • 标签 2
  • 标签 3
  • 标签 4
  • 图像视图 2

该表是不可滚动的。我设法根据行数改变了它的高度。这是我在创建单元格后使用的代码:

var frame = tableView.frame
frame.size.height = tableView.contentSize.height
tableView.frame = frame
Run Code Online (Sandbox Code Playgroud)

但是当Table视图高度调整时,其他控件(Label1、Label2、Label3、Label4和Image View2)的位置并没有调整。他们重叠了。表格视图高度调整时如何自动调整其他控件的位置?

更新:viewController 代码:

class MyViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
{
    @IBOutlet weak var _Label1: UILabel!
    @IBOutlet weak var _Label2: UILabel!
    @IBOutlet weak var _Label3: UILabel!
    @IBOutlet weak var _Label4: UILabel!
    @IBOutlet weak var _Label5: UILabel!

    @IBOutlet weak var _TableViewItems: UITableView!

    override func viewDidLoad()
    {
        super.viewDidLoad()

        // this will remove the extra empty cell divider lines
        _TableViewItems.tableFooterView = UIView()

        _TableViewItems.delegate = self
        _TableViewItems.dataSource = self

    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return items.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCell(withIdentifier: "sampleId") as! Sample
        let row = indexPath.row

        var frame = _TableViewItems.frame

        cell ._LabelNext.text = "Sample Text"

        frame.size.height = _TableViewItems.contentSize.height
        _TableViewItems.frame = frame

        return cell
    }

    override func viewWillLayoutSubviews()
    {
        super.viewWillLayoutSubviews()
        tableViewHeightConstraint.constant = _TableViewItems.contentSize.height // <------ unresolved tableViewHeightConstraint
    }
}
Run Code Online (Sandbox Code Playgroud)

Sat*_*ish 6

不确定您在哪里添加了提到的代码

但是,使用约束(自动布局)并添加以下代码将解决您的问题。

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()

    tableViewHeightConstraint.constant = tableView.contentSize.height
}
Run Code Online (Sandbox Code Playgroud)