UIView в UITableView меняет кадр автоматически - PullRequest
1 голос
/ 19 февраля 2020

У меня есть это UIView, добавленное к моему UITableView:

self.tableView.addSubview(viewInfoPlus)
self.viewInfoPlus.frame = CGRect.init(x: kWidth - 193 - 32, y: 751, width: 193, height: 103)

Тот, который обозначен красной стрелкой.

UIView на скриншоте имеет правильный кадр, но когда я пытаюсь перезагрузить UITableView или просто несколько ячеек / ячеек, используя:

let indexPath = IndexPath.init(row: 0, section: TableSection.plus.rawValue)            
UIView.setAnimationsEnabled(false)
self.tableView.beginUpdates()
tableView.reloadRows(at: [indexPath], with: .none)
self.tableView.endUpdates()
UIView.setAnimationsEnabled(true)

UIView автоматически меняет кадр на неправильный как вы можете видеть на этом скриншоте. Но когда пользователь прокручивает до UITableVIew, UIView автоматически снова меняет свой кадр на правильный. Очевидно, я никогда не менял кадр в коде.

enter image description here

1 Ответ

0 голосов
/ 19 февраля 2020

Использование ограничений вместо фрейма .

Настройка фреймов при изменении размера не гарантируется. Autolayout позволяет просматривать, которые динамически приспосабливаются к различным размерам классов и позиций. Проверьте следующий пример

Пример:

viewInfoPlus.translatesAutoresizingMaskIntoConstraints = false
viewInfoPlus.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 20).isActive = true
viewInfoPlus.rightAnchor.constraint(equalTo: view.rightAnchor, constant: 20).isActive = true
viewInfoPlus.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
viewInfoPlus.heightAnchor.constraint(equalToConstant: 103).isActive = true
...