根据 Swift 4 中的表视图高度动态调整布局



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

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

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

var frame = tableView.frame
frame.size.height = tableView.contentSize.height
tableView.frame = frame

但是,当表视图高度调整时,其他控件(标签 1、标签 2、标签 3、标签 4 和图像视图 2(的位置不会调整。它们重叠。表视图高度调整时如何自动调整其他控件的位置?

更新: 视图控制器代码:

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
}
}

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

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

override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
tableViewHeightConstraint.constant = tableView.contentSize.height
}

控件重叠,因为执行此操作后需要调整其他控件的框架。

var frame = tableView.frame
frame.size.height = tableView.contentSize.height
tableView.frame = frame
// Adjust Frame of other controls below tableview.

但我强烈建议您使用约束。 如果您不了解约束,请阅读此内容。

最新更新