Макет табличного представления не обновляется при изменении ориентации устройства - PullRequest
0 голосов
/ 07 июня 2019

Итак, я создал tableView и сделал его кадр идентичным кадру view, поэтому он должен быть того же размера, что и экран телефона.Однако, когда я изменяю ориентацию устройства на симулятор в симуляторе, представление таблицы сохраняет те же размеры, что и в портретном режиме.

Вот мой код tableView:

        func setTableView() {
    tableView.translatesAutoresizingMaskIntoConstraints = false
    tableView.frame = view.frame
    tableView.backgroundColor = UIColor.lightGray
    tableView.delegate = self
    tableView.dataSource = self
    tableView.separatorColor = UIColor.lightGray

    tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}

Вот метод viewDidLoad:

       override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(tableView)
    setTableView()

}

Вот метод, в котором я обнаруживаю изменение ориентации:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)


    if UIDevice.current.orientation.isLandscape {


        print("Landscape")

    } else {



        print("Portrait")

    }
}

Вот что я получаю в симуляторе.В альбомном режиме табличное представление составляет только половину ширины представления, в то время как оно должно всегда заполнять весь экран.

enter image description here

enter image description here

1 Ответ

0 голосов
/ 07 июня 2019

Обычно, если вы хотите, чтобы кадр вида определял его привязки, вы не устанавливаете tableView.translatesAutoresizingMaskIntoConstraints = false.Установка этого флага в false заставит его полагаться на якоря, а не на его собственную рамку просмотра для установки его ограничений.

Вы можете попробовать установить его на true, или вы можете просто ограничить таблицу допредставление выглядит так:

self.view.addSubview(tableView)
tableView.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
tableView.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true
tableView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true

Это ограничит его рамкой вида.Если вы делаете это таким образом, вам не нужно беспокоиться о настройке tableView.frame = view.frame.Лично я предпочитаю этот метод, чем полагаться на фреймы представления.

...