Swift-以编程方式将TableView置于具有约束的另一个视图下方

时间:2019-05-29 23:13:06

标签: swift uitableview constraints

我正在使用Swift 4.2。

我正在尝试在另一个视图(例如-标签)下面获取一个表格视图。

我想要的是这样的

+----------------------------------------+
|        label                           |
+----------------------------------------+

+----------------------------------------+
|                                        |
|                                        |
|                                        |
|                                        |
|        tableView                       |
|                                        |
|                                        |
|                                        |
|                                        |
+----------------------------------------+

// label constraints
label.translatesAutoresizingMaskIntoConstraints = false
let label_Leading_Constraint = NSLayoutConstraint(item: label, attribute: NSLayoutConstraint.Attribute.leading, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self.view, attribute: NSLayoutConstraint.Attribute.leading, multiplier: 1, constant: 0)
let label_Trailing_Constraint = NSLayoutConstraint(item: label, attribute: NSLayoutConstraint.Attribute.trailing, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self.view, attribute: NSLayoutConstraint.Attribute.trailing, multiplier: 1, constant: 0)
let label_Top_Constraint = NSLayoutConstraint(item: label, attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: previous_label, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: 10)
NSLayoutConstraint.activate([label_Leading_Constraint, label_Trailing_Constraint, label_Top_Constraint])


var tableView = UITableView()
tableView.translatesAutoresizingMaskIntoConstraints = false      
tableView.dataSource = self
tableView.delegate = self
tableView.backgroundColor = UIColor.white

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "mycell")

self.view.addSubview(tableView)

tableView.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 20.0).isActive = true
tableView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 20.0).isActive = true
tableView.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: -20.0).isActive = true
tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -20.0).isActive = true

当我使用上面的代码时,将显示tableview。 tableview约束相对于ALL视图(self.view)而言,这不是我想要的,因为我希望tableview出现在标签下方。

如果我将此代码更改为所需的代码(表视图的顶部应在标签视图下方20):

tableView.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 20.0).isActive = true
tableView.topAnchor.constraint(equalTo: label.bottomAnchor, constant: 20).isActive = true
tableView.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: -20.0).isActive = true
tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -20.0).isActive = true

我在屏幕底部弄乱了标签视图,并且根本没有显示tableview。

请不要建议类似这样的表头。您可以假设我在屏幕的顶部拥有更多视图,而我只是希望在其下方显示表格视图。

此外,请不要建议分镜脚本。我正在尝试以编程方式完成所有操作。

我想念什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我的猜测是您的UILabel约束设置不正确。

例如,如果您设置了label.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true,这将导致您得到“混乱”的结果。

标签锚点应为:

label.translatesAutoresizingMaskIntoConstraints = false      
label.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 20.0).isActive = true
label.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 20.0).isActive = true
label.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: -20.0).isActive = true

仅此而已