UIViewController с высотой пол экрана и tableview на нем?

swift
swift5
tableviewcell
ios
tableview

#1

Хочу чтобы открывался экран и он был высотой в пол экрана.
Уменьшаю высоту главного View, добавляю Tableview и в нем устанавливаю header. Этот ViewController имеет модульное представление, вызываю из другого ViewController при нажатии на кнопку.
Когда открывается этот экран почему-то header на самом верху и ячейки tableview не отрисованы, он как будто вообще в функции, касающиеся tbleview не заходит.

Подскажите пожалуйста, в чем ошибка? Почему не уменьшается высота главного View?

    class SecondViewController: UIViewController {

let tableView = UITableView()

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = .tableViewColor
    self.view = UIView(frame: CGRect(x: 0, y: 500, width: self.view.frame.width, height: 400))
    self.view.backgroundColor = .tableViewColor
    self.view.layer.cornerRadius = 10
    
    setupTableView() //
    headerCreate()
    tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1))
    

extension DateEditViewController {
func setupTableView() {
    view.addSubview(tableView)
    tableView.translatesAutoresizingMaskIntoConstraints = false
    tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    tableView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
    tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    tableView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
}

}

extension DateEditViewController {
func headerCreate() {
let label = UILabel(frame: CGRect.zero)
label.translatesAutoresizingMaskIntoConstraints = false
label.text = “Выбрать период”

    let subview = UIView()
    subview.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 40)
    subview.addSubview(label)
    label.leadingAnchor.constraint(equalTo: subview.leadingAnchor, constant: 120).isActive = true
    label.topAnchor.constraint(equalTo: subview.topAnchor, constant: 12).isActive = true
    label.backgroundColor = .clear
    label.textColor = UIColor.headerTextColor
    label.font = UIFont.systemFont(ofSize: 17)
    label.numberOfLines = 1
    label.textAlignment = .center
    tableView.tableHeaderView = subview
}

}

Большое спасибо!


#2

Получилось отобразить View на пол экрана, но ячеек все еще нет, почему-то не заходит в функции создания

let newview = UIView(frame: CGRect(x: 0, y: 400, width: self.view.frame.width, height: 400))
    self.view.backgroundColor = .clear
    newview.backgroundColor = .yellow
    newview.layer.cornerRadius = 10
    
    self.view = UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))
    self.view.addSubview(newview)

Нужно было очищать backgroundcolor главного View и создавать желаемое View и устанавливать в желаемое положение.
Только не знаю насколько корректно это будет работать на разных устройствах и не будет ли “зависать в воздухе”.


#3

Подписать tableView под Delegate, DataSource


#4

Эврика! Спасибо большое!


#5

У меня этот контроллер не отображается в горизонтальном представлении, это из-за того, что он остается внизу экрана при FirstViewController? Не подскажете как можно его перемещать в зависимости от положения экрана?


#6

а не проще ли вам использовать еще один ViewController вместо главного?