Нажмите здесь, чтобы увидеть пользовательский интерфейс моего приложения
Здесь На изображении вы можете увидеть пользовательский интерфейс.
-> Есть таблица Просмотр и кнопка на главном виде.
-> Я взял пользовательский класс tableViewCell. В ячейке я выбрал UIView
. К этому виду добавлены следующие ограничения: центр по горизонтали, высота, ширина, ограничение сверху и снизу
Я добавил выход ограничения высоты для класса TVCell
-> Я взял кнопку и добавил к ней обработчик событий
-> Button Обработчик событий :
В обработчике событий кнопки я просто изменяю высоту представления в первой ячейке и перезагружаю ячейку.
Теперь проблема в том, что высота ячейки изменяется, когда я нажимаю на кнопка. Но это происходит только тогда, когда я нажимаю одну кнопку дважды. Поэтому я хочу знать, почему это происходит. Здесь я добавляю свой код ниже.
У меня есть одно решение этой проблемы, которое вы можете увидеть после кода кода ViewController & TableViewCell
VIEW CONTROLLER CLASS
import UIKit
class ViewController: UIViewController,UITableViewDataSource{
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.separatorColor = UIColor.black
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
return cell
}
@IBAction func buttonAction(_ sender: Any) {
let indexPath = IndexPath(row: 0, section: 0)
let cell = tableView.cellForRow(at: indexPath) as! TableViewCell
if cell.viewHeightConstraint.constant == 75 {
cell.viewHeightConstraint.constant = 10
}
else{
cell.viewHeightConstraint.constant = 75
}
tableView.reloadRows(at: [indexPath] , with: UITableView.RowAnimation.automatic)
}
}
TABLEVIEWCELL CLASS
import UIKit
class TableViewCell: UITableViewCell {
@IBOutlet weak var viewHeightConstraint: NSLayoutConstraint!
override func awakeFromNib() {
super.awakeFromNib()
//Setting View Height To 75
viewHeightConstraint.constant = 75
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
Вы можете получить этот исходный код по этой ссылке ниже
https://github.com/himansudev/tableViewIssue_15_4_20_1.git
Теперь у меня есть решение этой проблемы, но я считаю, что это не правильное решение. Итак, что я сделал, как показано ниже
1) Я изменил обработчик событий кнопки, см. Ниже модифицированный код. Пожалуйста, обратитесь к приведенному выше коду для определения изменений, которые я внес в этот обработчик событий
@IBAction func buttonAction(_ sender: Any) {
let indexPath = IndexPath(row: 0, section: 0)
tableView.reloadRows(at: [indexPath] , with: UITableView.RowAnimation.automatic)
}
2) Во-вторых, я добавил этот дополнительный фрагмент кода, см. Ниже
override func viewDidLayoutSubviews() {
print("viewDidLayoutSubviews")
let indexPath = IndexPath(row: 0, section: 0)
let cell = tableView.cellForRow(at: indexPath) as! TableViewCell
if cell.viewHeightConstraint.constant == 75 {
cell.viewHeightConstraint.constant = 10
}
else{
cell.viewHeightConstraint.constant = 75
}
}
Найти исходный код после изменений ниже
https://github.com/himansudev/tableViewSolution_15_4_20_1.git
Теперь после выполнения этих двух изменений он работает (но иногда он не работает, когда я нажимаю на кнопка быстро много раз), но проблема в том, что viewDidLayoutSubviews () не вызывается, но когда я комментирую это, ячейка работает не так, как ожидалось.
ТАК Я хочу знать, почему она так себя ведет ??