swift - Swift - 以编程方式将 TableView 置于另一个具有约束的视图下方
问题描述
我正在使用 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
我在屏幕底部弄乱了标签视图,并且表格视图根本没有显示。
请不要建议类似的表头。您可以假设我在屏幕顶部有更多视图,我只是希望表格视图显示在它们下方。
另外,请不要推荐故事板。我正在尝试以编程方式完成所有操作。
我错过了什么?
谢谢!
解决方案
我的猜测是您UILabel
的 s 约束设置不正确。
例如,如果您设置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
仅此而已
推荐阅读
- javascript - 在javascript中选择时如何替换文本
- react-native - 如何在 react-native-awesome-alerts 中的警报消息中插入换行符
- vb.net - 按列搜索 dgv ("TagIndex = 5")
- css - 在移动设备上滚动/滑动鼠标不起作用
- hyperledger-fabric - 在生产中部署超级账本结构
- types - 异步 fn 的类型是什么?
- azure - 如何获取用户在 AppInsights 上从会话开始到会话结束的整个旅程所花费的时间
- javascript - 如何在窗口单击时添加新的 Div 元素
- python - 如何使用 Python 在 MySQL 中搜索记录
- python - 只能连接列表(不是“字节”)来列出