Swift - размещение TableView под другим представлением с ограничениями программно - PullRequest
1 голос
/ 30 мая 2019

Я использую Swift 4.2.

Я пытаюсь получить табличное представление под другим представлением, например - label.

То, что я хочу, выглядит примерно так:

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

Когда я использую приведенный выше код, отображается таблица. Ограничения табличного представления относятся к представлению ALL (self.view), а это не то, что я хочу, потому что я хочу, чтобы табличное представление отображалось под меткой.

Если я изменю этот код на свой желаемый код (верхняя часть табличного представления должна быть на 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

В нижней части экрана отображается неверный вид ярлыка, а табличное представление вообще не отображается.

Пожалуйста, не предлагайте заголовок таблицы чего-то подобного. Вы можете предположить, что у меня есть еще несколько представлений в верхней части экрана, и я просто хочу, чтобы под ними отображался вид таблицы.

Также, пожалуйста, не предлагайте раскадровку. Я пытаюсь сделать все это программно.

Что мне не хватает?

Спасибо!

1 Ответ

1 голос
/ 30 мая 2019

Я думаю, что ваши ограничения 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

и ничего более

...